条件测试
Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。
使用专门的测试工具—test命令,可以对条件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)
使用test测试命令时,包括以下两种形式。
test 【测试选项】 条件表达式
或者
[ 【测试选项】 条件表达式 ]
这两种方式的作用完全相同,但通常后一种形式更为常用,也更贴近编程习惯。需要注意的是,方括号 “[ ]”与条件表达式之间需要至少需要一个空格进行分隔。
根据需要测试的条件类别不同,条件表达式也不同。比较常用的条件操作包括文件测试、整数值比较、字符串比较,以及针对多个条件的逻辑测试。
1.文件测试
- -d:测试是否为目录
- -e:测试目录或文件是否存在
- -f:是否为文件
- -r:测试当前用户是否有权限读取
- -w:测试当前用户是否有权限写入
- -x:测试是否设置有可执行权限
- -nt:判断文件A是否比文件B新。
- -ot:判断文件A是否比文件B旧。
- -ef:判断两个文件是否为同一个文件,用来判断两个文件是否指向同一个inode。
2.整数值比较
- -eq:第一个数等于第二个数
- -ne:第一个数不等于第二个数
- -gt:第一个数大于第二个数
- -lt:第一个数小于第二个数
- -le:第一个数小于或等于第二个数
- -ge:第一个数大于或等于第二个数
3.字符串比较
- ==:第一个字符串与第二个字符串相同
- !=:第一个字符串与第二个字符串不相同
- -z:检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
4.逻辑测试
逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,判断是根据这些条件同时成立还是只要有其中一个成立等情况,需要有一个测试的过程。常用的逻辑测试操作如下👇,使用时放在不同的测试语句或命令之间。
- &&:逻辑与,表示“并且”,只有前后两个条件都成立时,整个测试命令的返回值才为0(结果成立)。使用test命令测试时,可改用test -a
- ||:逻辑或,表示“或者”,只要前后两个条件中有一个成立,整个测试命令的返回值及为0(结果成立)。使用test命令测试时,可改用test -o
- !:逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为0(结果成立)
if语句
1.单分支的if语句
if 条件测试操作 //如果条件成立
then //则
命令序列
fi //结束判断
2.双分支语句
if 条件测试 //如果条件成立
then
命令序列1
else //否则
命令序列2
fi //结束判断
3.多分支语句
if 条件测试1 //如果条件成立
then //则
命令序列1
elif 条件测试2 //或如果
then //则
命令序列2
else //否则
命令序列3
fi //结束判断