ELIF是if-else结构的延伸,用于多条件线性判断;需注意语法规范(如空格、分号、fi结尾)、顺序执行特性及常见错误(如误写else if、混淆字符串与数值比较符)。

ELIF 是多条件分支的核心工具
ELIF 不是独立语句,而是 if-else 结构的延伸,用于在前一个条件不成立时,继续检查下一个条件。它避免了嵌套 if 带来的缩进混乱和可读性下降,让多个互斥判断逻辑清晰、线性展开。
基本语法与关键细节
必须注意几个硬性规则,否则脚本会报错或行为异常:
-
每个条件后必须有分号或换行:写成
if [ $a -eq 1 ]; then或换行写if [ $a -eq 1 ]换行then -
[ ] 内部运算符两侧必须有空格:
[ "$x" = "yes" ]正确,["$x"="yes"]会报“command not found” - 整个结构以 fi 结尾:if、elif、else 都属于同一个语句块,只用一个 fi 关闭
- 条件按顺序逐个判断,命中即停:一旦某个 elif 条件为真,后续 elif 和 else 全部跳过
常见使用场景与写法示例
从实际运维和脚本开发中高频出现的三类需求出发:
-
数值分级判断:比如根据分数输出等级
if [ $score -ge 90 ]; then echo "优秀"<br> elif [ $score -ge 80 ]; then echo "良好"<br> elif [ $score -ge 60 ]; then echo "及格"<br> else echo "不及格"<br> fi
-
字符串状态识别:如服务状态参数传入脚本
if [ "$action" = "start" ]; then systemctl start nginx<br> elif [ "$action" = "stop" ]; then systemctl stop nginx<br> elif [ "$action" = "restart" ]; then systemctl restart nginx<br> else echo "用法:$0 {start|stop|restart}"<br> fi -
混合类型组合判断:先查文件是否存在,再判是否为空,再判是否可读
if [ ! -e "$file" ]; then echo "文件不存在"<br> elif [ -z "$(cat "$file" 2>/dev/null)" ]; then echo "文件为空"<br> elif [ ! -r "$file" ]; then echo "无读取权限"<br> else echo "文件就绪,可处理"<br> fi
容易踩坑的地方
这些错误在调试阶段最常导致“逻辑没走对”:
- 把
elif写成else if(Bash 不认这个写法,会当作两个独立命令) - 忘记在
elif前加then对应的fi—— 实际上不需要,所有分支共用末尾一个 fi - 用
=比较数字(应使用-eq等整数运算符),或用-eq比较字符串(会静默失败) - 变量未加双引号,遇到含空格或特殊字符的值时测试直接崩溃











