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