linux shell if语句依据命令退出码(0为真)判断,结构须以if开头、then引导、fi结尾;支持单分支、双分支、多分支形式;条件表达式推荐使用[[ ]](支持&&、正则等)更安全。

Linux Shell 中的 if 语句靠命令退出状态码(0 表示真/成功,非 0 表示假/失败)做判断,不是靠输出内容。写法灵活,但结构必须闭合:以 if 开头、then 引导执行块、fi 结尾。
单分支 if:满足条件才执行
只处理“是”的情况,不处理“否”。
- 语法简洁:
if [ 条件 ]; then 命令; fi(注意[和]周围必须有空格) - 条件可以是文件测试(如
-f file判断文件存在)、字符串比较(如"$var" = "yes")、数值比较(如$num -gt 10),也可直接用命令(如systemctl is-active --quiet sshd) - 常见用途:检查关键文件是否存在、确认服务是否就绪、验证参数是否为空
双分支 if-else:二选一逻辑
明确区分“成立”和“不成立”两种路径。
- 格式:
if [ 条件 ]; then 命令1; else 命令2; fi - 注意:不要把
else写成els或漏掉分号;then和else后的命令可换行,也可用分号连写 - 实用例子:磁盘使用率超阈值时报警,否则提示正常;用户输入为空时提示补全,否则继续处理
多分支 if-elif-else:多个条件依次判断
适合有优先级或互斥场景,从上到下逐个检查,命中即停。
- 结构:
if [ 条件1 ]; then ... elif [ 条件2 ]; then ... else ... fi - 每个
elif是独立的条件分支,不满足前一个才会进入下一个;else是兜底项,可省略 - 典型应用:根据传入参数执行不同操作(如
bash script.sh start/stop/status);按数值范围分类输出(如分数对应等级)
条件表达式怎么写更安全?
别只记 [ ],三种常用写法各有侧重:
-
[ ](等价于test):兼容性最好,但字符串比较要用=,数值比较用-eq/-gt,不支持&&或正则 -
[[ ]]:Bash 扩展,推荐日常使用。支持&&、||、=~正则匹配,字符串比较可用==,且自动防空格截断(如[[ $var == "a b" ]]安全) -
(( )):专用于整数计算和比较,支持>、、<code>==等 C 风格运算符,比如(( num >= 5 ))











