linux shell中多分支条件判断主要依靠if-elif-else结构,从上到下依次测试条件,首个为真即执行对应分支并跳过其余;必须用fi结束,且[ ]内左右空格不可省,推荐使用[[ ]]增强安全性与功能。

Linux Shell 脚本中实现多分支条件判断,主要靠 if-else-if(即连续的 elif)结构,而不是像某些语言那样用 switch/case(虽然 Bash 也支持 case,但它是独立语法,不属于 if 分支体系)。关键在于正确使用 elif 和成对的 fi。
基本语法:用 elif 实现多分支
Shell 中没有 else if 关键字,而是用 elif(else + if 的缩写),每个条件单独测试,从上到下依次判断,遇到第一个为真就执行对应分支,其余跳过。必须以 fi 结束整个 if 块。
示例:
if [ "$score" -ge 90 ]; then
echo "优秀"
elif [ "$score" -ge 80 ]; then
echo "良好"
elif [ "$score" -ge 60 ]; then
echo "及格"
else
echo "不及格"
fi注意测试命令的写法和空格
方括号 [ ] 实际是 test 命令的别名,要求内部**左右两侧必须有空格**,否则会报错或逻辑异常。推荐用 [[ ]](Bash 扩展)更安全,支持正则、字符串比较等。
-
[ "$name" = "Alice" ]✅ 正确(注意引号防空值,等号两边有空格) -
[ "$name"=="Alice" ]❌ 报错:bash: [: missing `]' -
[[ $name =~ ^A.* ]]✅ 支持正则匹配,且变量未引号也不易出错
常见多分支场景与写法
实际脚本中,多分支常用于参数解析、状态检查、用户输入处理等:
- 根据命令行参数执行不同操作:
if [ "$1" = "start" ]; then ... elif [ "$1" = "stop" ]; then ... else echo "usage: $0 {start|stop}"; exit 1; fi - 检查文件类型:
if [ -f "$file" ]; then echo "普通文件"; elif [ -d "$file" ]; then echo "目录"; elif [ -L "$file" ]; then echo "软链接"; else echo "不存在或特殊文件"; fi - 结合命令退出状态:
if ping -c1 google.com &>/dev/null; then echo "联网"; elif curl -s --head http://localhost:8080 &>/dev/null; then echo "本地服务可用"; else echo "全部不可达"; fi
替代方案:case 语句更适合固定值匹配
如果只是对一个变量做多个**离散值**判断(比如选项、状态码、文件后缀),case 比 if-elif 更清晰、高效,且支持通配和模式扩展:
case "$ext" in
"txt"|"log"|"csv")
echo "文本类文件"
;;
"jpg"|"png"|"gif")
echo "图片文件"
;;
*)
echo "未知类型"
;;
esac它不是 if 的变体,但常被用来解决同类问题——选哪个取决于逻辑:数值范围/复杂条件用 if-elif,枚举值/字符串模式用 case。











