判断语句
if…then形式
类似于C/C++中的if-else语句。
单层if
命令格式:
if condition
then
语句1
语句2
...
fi
示例:
a=3
b=4
if [ "$a" -lt "$b" ] && [ "$a" -gt 2 ]
then
echo ${a}在范围内
fi
输出结果:
3在范围内
单层if-else
命令格式
if condition
then
语句1
语句2
...
else
语句1
语句2
...
fi
示例:
a=3
b=4
if ! [ "$a" -lt "$b" ]
then
echo ${a}不小于${b}
else
echo ${a}小于${b}
fi
输出结果:
3小于4
多层if-elif-elif-else
命令格式
if condition
then
语句1
语句2
...
elif condition
then
语句1
语句2
...
elif condition
then
语句1
语句2
else
语句1
语句2
...
fi
示例:
a=4
if [ $a -eq 1 ]
then
echo ${a}等于1
elif [ $a -eq 2 ]
then
echo ${a}等于2
elif [ $a -eq 3 ]
then
echo ${a}等于3
else
echo 其他
fi
输出结果:
其他
case…esac形式
类似于C/C++中的switch语句。
命令格式
case $变量名称 in
值1)
语句1
语句2
...
;; # 类似于C/C++中的break
值2)
语句1
语句2
...
;;
*) # 类似于C/C++中的default
语句1
语句2
...
;; # 最后一行的;;可以删,但最好别删
esac
示例:
a=4
case $a in
1)
echo ${a}等于1
;;
2)
echo ${a}等于2
;;
3)
echo ${a}等于3
;;
*)
echo 其他
;;
esac
输出结果:
其他
case 语句的注意事项
- 每个分支的语句结尾必须写
;;(最后一个分支可以省略),否则 bash 会直接报语法错误syntax error near unexpected token。这点与 C/C++ 的 switch 不同——C 里忘写 break 会“贯穿”到下一分支,bash 里则根本过不了语法检查。 - 值里可以写通配符:
*匹配任意、?匹配单个字符、a|b)表示匹配 a 或 b。*)必须放最后,它排在前面会把所有值都截走。 - 变量要加双引号
case "$a" in,防止值为空串时语法错乱。
if 条件里组合多个判断
if 语句除了上文的 [ ... ] && [ ... ],还可以在一对中括号里用 -a(与)、-o(或)连接两个 test 条件:if [ "$a" -lt "$b" -a "$a" -gt 2 ]。bash 专属写法则用 <span class="wikilink-missing"></span>:if <span class="wikilink-missing">$a -lt $b && $a -gt 2</span>,可读性最好(详见上一篇 test命令与判断符号)。
项目分区导航:test命令与判断符号 ⬅️ | 16-判断语句 | ➡️ 循环语句
💬 评论