Shell脚本详解:从理论到实践(二)

Shell脚本详解:判断

一、基础判断语句 if...then...fi

Shell 中最基本的判断结构是 if...then...fi

语法:

bash 复制代码
if [ 条件 ]
then
    # 条件成立时执行的代码
fi

关键点:

  1. [ 条件 ] 是测试语句,注意括号 [] 两边必须有空格。
  2. then 必须单独一行,或与 if 用分号 ; 分隔。
  3. fi 表示条件语句结束。

示例 1:检查文件是否存在

bash 复制代码
#!/bin/bash

file="test.txt"

if [ -e "$file" ]
then
    echo "$file 存在"
fi

二、多重判断(嵌套 if

当需要处理多个条件时,可以使用 elif 和嵌套 if

语法:

bash 复制代码
if [ 条件1 ]
then
    # 条件1成立
elif [ 条件2 ]
then
    # 条件2成立
else
    # 以上都不成立
fi

示例 2:成绩分级

bash 复制代码
#!/bin/bash

read -p "请输入成绩: " score

if [ "$score" -ge 90 ]
then
    echo "优秀"
elif [ "$score" -ge 80 ]
then
    echo "良好"
elif [ "$score" -ge 60 ]
then
    echo "及格"
else
    echo "不及格"
fi

三、复杂条件组合

使用 &&(逻辑与)、||(逻辑或)组合多个条件。

示例 3:检查文件类型

bash 复制代码
#!/bin/bash

file="example"

if [ -e "$file" ] && [ -f "$file" ]
then
    echo "$file 是普通文件"
elif [ -e "$file" ] && [ -d "$file" ]
then
    echo "$file 是目录"
else
    echo "$file 不存在"
fi

四、case 语句(多分支选择)

case 是处理多重匹配的更简洁方式。

语法:

bash 复制代码
case 变量 in
模式1)
    命令...
    ;;
模式2)
    命令...
    ;;
*)
    默认命令...
    ;;
esac

示例 4:服务管理脚本

bash 复制代码
#!/bin/bash

read -p "操作(start/stop/restart): " action

case "$action" in
    start)
        echo "启动服务..."
        ;;
    stop)
        echo "停止服务..."
        ;;
    restart)
        echo "重启服务..."
        ;;
    *)
        echo "无效操作"
        ;;
esac

五、常见条件判断类型

类型 写法 说明
文件检测 -e file 文件是否存在
-d dir 是否是目录
-f file 是否是普通文件
字符串比较 "str1" = "str2" 字符串相等
"str1" != "str2" 字符串不等
-z "$str" 字符串为空
数值比较 num1 -eq num2 等于
num1 -gt num2 大于
num1 -lt num2 小于

六、综合实例:备份脚本

bash 复制代码
#!/bin/bash

# 检查备份目录是否存在
backup_dir="/backup"
if [ ! -d "$backup_dir" ]
then
    mkdir -p "$backup_dir" || echo "创建目录失败" && exit 1
fi

# 检查源文件
source_file="/data/app.log"
if [ ! -f "$source_file" ]
then
    echo "源文件不存在"
    exit 1
fi

# 执行备份
cp "$source_file" "$backup_dir/app.log.$(date +%Y%m%d)" && echo "备份成功" || echo "备份失败"

说明:

  1. ||&& 用于命令执行结果处理
  2. $(date +%Y%m%d) 生成日期字符串
  3. 多重条件组合确保流程可靠性

掌握这些判断结构后,您可以编写出健壮的 Shell 脚本处理各种条件分支任务。

相关推荐
网络工程小王8 小时前
【LangChain 大模型6大调用指南】调用大模型篇
linux·运维·服务器·人工智能·学习
wangbing11258 小时前
各linux版本的包管理命令
linux·运维·服务器
Joseph Cooper8 小时前
Linux/Android 跟踪技术:ftrace、TRACE_EVENT、atrace、systrace 与 perfetto 入门
android·linux·运维
比昨天多敲两行9 小时前
Linux基础开发工具(下)
linux·运维·服务器
feng145610 小时前
OpenSREClaw - 故障复盘和变更评审双 Agent 案例
运维·人工智能
linux修理工10 小时前
chrome官方下载地址
运维·服务器
无忧智库10 小时前
IT运维正在经历一场真正的范式革命:从告警风暴到AIOps自主自愈的完整工程解构(WORD)
运维
笨笨饿11 小时前
69_如何给自己手搓一个串口
linux·c语言·网络·单片机·嵌入式硬件·算法·个人开发
cn_lyg11 小时前
Linux的入门级常用操作命令
linux·运维·服务器
geneculture11 小时前
《智能通信速分多次传输技术(VDMT)》专利文件的全文汉英双语对照版本
服务器·网络·人工智能·融智学的重要应用·哲学与科学统一性·融智时代(杂志)·人机间性