Blog.037 Shell 编程 条件语句
本章目录
1. test 命令
2. 条件测试
2.1 文件测试
2.2 整数测试
2.3 逻辑测试
2.4 字符串测试
3. if 语句
3.1 if 单分支语句
3.2 if 双分支语句
3.3 if 多分支语句
4. case 分支语句
- 用来测试表达式是否成立,若成立返回0,否则返回其他数值;
- 它只能用来判断是否成立,无法判断是否正确;
- 格式:
- ①:test 条件表达式
- ②:[ 条件表达式 ] (中括号和条件表达式两边要有空格,否则会报错)
- 在进行测试表达式的时候,如果我们测试一个没有定义的表达式,那么他返回的就是非0值,代表该表达式不成立;
- 但当我们定义了该值,那么就代表表达式成立,返回的值是0。
- 常见的测试操作符:
| 测试选项 | 作用 |
| -b 文件 | 判断该文件是否存在,并且是否为块设备文件 |
| -c 文件 | 判断该文件是否存在,并且是否为字符设备文件 |
| -d 文件 |
判断该文件是否存在,并且是否为目录文件 |
| -e 文件 | 判断该文件是否存在 |
| -f 文件 | 判断该文件是否存在,并且是否为普通文件 |
| -L 文件 | 判断该文件是否存在,并且是否为符号链接文件 |
| -p 文件 | 判断该文件是否存在,并且是否为管道文件 |
| -s 文件 | 判断该文件是否存在,并且是否为非空 |
| -S 文件 | 判断该文件是否存在,并且是否为套接字文件 |




- 格式:
- [ 整数1 操作符 整数2 ]
- 常见的测试操作符:
- -eq:等于(Equal)
- -ne:不等于(Not Equal)
- -gt:大于(Greater Than)
- -lt:小于(Lesser Than)
- -le:小于或等于(Lesser or Equal)
- -ge:大于或等于(Greater or Equal)

- 格式:
- ①:[ 表达式1 ] 操作符 [ 表达式2 ] ...
- ②:命令1 操作符 命令2 ...
- 常用的测试操作符:
- -a或&&:逻辑与,“而且”的意思,前后条件需都成立
- -o 或 ||:逻辑或,“或者”的意思,只需要前后条件中的一个成立
- !:逻辑否
- Tips:&&,|| 操作符能够正常存在于 [[ ]] 条件判断结构中,但如果出现在 [ ] 结构中,会报错。

- 格式:
- ①:[ 字符串1 = 字符串2 ] [ 字符串1 ! = 字符串2 ]
- ②:[ -z 字符串 ] [ -n 字符串 ]
- 常用的测试操作符:
- =:字符串内容相同
- !=:字符串内容不同,!号表示取反的意思
- -z:字符串内容为空 ,对于未定义或者赋予空值的变量将被视为空串
- -n:检查是否有字符串存在

当我们遇到需要选择执行的命令语句较多时,可以使用 if 条件语句,可以更好的整理脚本结构,使得层次分明,清晰易懂。
分支指的是不同测试结果所对应的执行语句(一条或者多条)。对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行如何操作。
- 语法结构:
if 条件测试操作
then 命令序列
fi

- 操作示例:


对于双分支的选择结构,要求针对“条件成立”、“条件不成立” 两种情况分别执行不同的操作。
- 语法格式:
if 条件测试操作
then
命令序列1
else
命令序列2
fi

- 操作示例:


由于 if 语句可以根据测试结果的成立、不成立来分别执行操作,所以可以嵌套使用,进行多次判断。
- 语法结构:
if 条件测试操作1
then
命令序列1
elif 条件测试操作2
then
命令序列2
else
命令序列3
fi

- 操作示例:


- 语法结构:
case 变量值 in
模式 1)
命令序列1
;;
模式 2)
命令序列2
;;
.......
*)
默认命令序列
esac
- case行尾必须为单词"in",每一模式必须以右括号“)”结束
- 双分号";;"表示命令序列结束
- 模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以用管道符号" | “表示或,如"A|B”。
- 最后的 " *) " 表示默认模式,其中的 星号 相当于通配符。

- 在上述语句结构中,关键字 case 后面跟着的是“变量值”,即“$变量名”,这点要和 for 循环的结构加以区别;
- 整个分支结构包括在 case…esac 之间,中间的模式1,模式2,…,*对应为变量不同取值(程序期望的取值),其中 星号 作为通配符,可匹配所有值。
- 操作示例:


-
浙公网安备 33010602011771号