Shell中的条件测试非常重要,尤其在编写shell脚本中尤其如此,如有时要判断字符串是否相等,可能还要检查文件状态或是数字测试,基于这些测试才能做进一步动作等等,那下面开始这一章的内容
◆ test:用于测试文件状态,字符串和数字,也很适合if、then、else条件结构
◆ expr:常用于数字、字符串等、及测试和执行数值输出,使用最后退出状态命令
◆ $? :可测知test和expr,二者均以0表示正确,1表示返回错误
一、test命令
1、 测试文件状态
·格式:test condition 或 [ condition ]
· condition:
-d 目录
-s 文件长度大于0、非空
-f 正规文件
-l 符号连接
-u 文件有s u i d位设置
-r 可读
-w 可写
-x 可执行
· 例子:
test -d /opt 或 [ -d /opt ] =>判断/opt目录是否存在,如echo $? 则返回0,否则返回1
2、字符串测试
·格式:test "string" string_operator "string" 或 [ "string" string_operator "string" ]
·string_operator 可为:
= :两个字符串相等
!= :两个字符串不相等
-z :空串
-n :非空串
·例子:
[ -n "abc" -a "abc" != "Abc"] => 返回真
3、数值测试
·格式:test number number_operator number 或 [ number number_operator number ]
·number_operator 可为:
-eq 数值相等
-ne 数值不相等
-gt 第一个数大于第二个数
-lt 第一个数小于第二个数
-le 第一个数小于等于第二个数
-ge 第一个数大于等于第二个数
·例子:
[ "12" -le "15" ] ; echo $? => 返回真
4、 测试时使用的逻辑操作符
·-a 逻辑与,操作符两边均为真,结果为真,否则为假
·-o 逻辑或,操作符两边一边为真,结果为真,否则为假
·! 逻辑否,条件为假,结果为真
例子:
[ -d /opt -a -w /opt/a.sh ] 当/opt目录存在,且/opt/a.sh文件可写时,返回真,否则返回假
二、expr
·格式: expr argument operator argument
·expr也是一个手动命令计数器
·例子:
# expr 12+3 => 12+3
# expr 12 + 3 => 15
# expr 12 \* 3 => 36
#判断字符串是否相等,结果为真,返回1 <与test不同>
# expr "a" = "a" => B=`expr 1 + 1`
# echo $B => 2