Linux中多分支用if-elif-else实现,需严格语法:elif和else顶格、条件用[ ]且空格分隔、数值用-eq等、字符串用=、变量加双引号、必有fi结尾。

Linux 中用 if-else 实现多分支,核心是靠 elif(即 else if)逐级追加判断条件,每个分支互斥、顺序执行,最后用 else 收尾兜底。
语法结构要写对
Shell 中多分支必须严格遵循缩进与换行规范,elif 和 else 必须顶格写,且紧接前一个 fi 前的 }(实际是 then 块结束后的换行)。正确写法如下:
if [ 条件1 ]; then 命令1elif [ 条件2 ]; then 命令2elif [ 条件3 ]; then 命令3else 命令4fi
注意:[ ] 是 test 命令的简写,前后必须有空格;数值比较用 -eq、-gt 等,字符串比较用 = 或 ==(取决于 shell 类型)。
条件设计要覆盖完整
多个 elif 分支之间应逻辑互斥、范围不重叠,避免遗漏或误判。常见做法包括:
- 按数值区间分段,例如 UID 判断:
$uid -lt 100、$uid -ge 100 -a $uid -lt 1000、$uid -ge 1000 - 优先处理高概率或关键场景,把最常触发的条件放在前面
- 务必保留
else,哪怕只写echo "未知情况"或exit 1,防止静默失败
实战中常配合变量和命令退出状态
Shell 的 if 实际检测的是命令的退出码(0 为真,非 0 为假),所以可直接判断命令是否成功:
if systemctl is-active --quiet httpd; then echo "running"; fiif ping -c1 -w1 192.168.1.1 &>/dev/null; then echo "online"; else echo "offline"; fi- 结合变量简化逻辑:
status=$(ps aux | grep nginx | grep -v grep | wc -l),再用if [ "$status" -gt 0 ]判断
避免常见坑点
写多分支时容易出错的地方:
- 忘记
fi结束,导致语法错误 -
elif写成else if(中间有空格)—— Shell 会报错,必须连写 - 条件中变量未加双引号,如
[ $var = "ok" ],当$var为空时变成[ = "ok" ],报错;应写成[ "$var" = "ok" ] - 混用字符串和数值比较:数字别用
=,要用-eq;字符串别用-eq,否则恒为假


















