判断语句

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 &amp;&amp; $a -gt 2</span>,可读性最好(详见上一篇 test命令与判断符号)。


项目分区导航test命令与判断符号 ⬅️ | 16-判断语句 | ➡️ 循环语句