写脚本的时候,有时要判断字符串是否相等,或者检查文件状态或者数字测试,基于这个条件才能做进一步动作。test命令用于测试字符串,文件状态和数字。expr命令测试和执行数值输出。使用最后退出状态命令$?可测知test和expr,两者均以0表示正确,1表示换回错误。
test用法
测试文件状态
test一般有两种格式
test condition 或 [condition](注意在条件两边加上空格)
逻辑操作符
-a 逻辑与,操作符两边均为真,结果为真,否则为假
-o 逻辑或,操作符两边一边为真,结果为真,否则为假
! 逻辑否,条件为假,结果为真
字符串测试
字符串测试是错误捕获很重要的一部分,特别是测试用户输入或比较变量时尤为重要。字符串测试有5种格式。
test “string”
test string_operator “string”
test “string” string_operator “string”
[ string_operator string ]
[ string string_operator string ]
string_operator可为:
= 两个字符串相等
!= 两个字符串不等
-z 空串
-n 非空串
测试数值
测试数值可以使用许多操作符,一般如下:
“number” numric_operator “number”
[“number” numric_operator “number” ]
numric_operator可为:
-eq 数值相等
-ne 数值不相等
-gt 第一个数大于第二个数
-lt 第一个数小于第二个数
-le 第一个数小于等于第二个数
-ge 第一个数大于等于第二个数
expr用法
expr命令一般用于整数值,但也可用于字符串。
expr argument operator argument
比如expr 10 + 10
注意使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义:expr 30 \* 3
增量计数
expr在循环中用于增量计算。首先,循环初始化为0,然后循环值加1,反引号的用法意即替代命令。
LOOP=0
LOOP=`expr $LOOP + 1`
数值测试
expr 可以用来测试一个数,如果试图计算非整数,将返回错误
[root@localhost ~]# expr 0.1 + 1
expr: 参数数目错误
模式匹配
expr也有模式匹配功能。可以使用expr通过指定冒号选项计算字符串中字符数。.*意即任何字符重复0次或多次
[root@localhost ~]# VALUE=texts.doc
[root@localhost ~]# expr $VALUE :'\(.*\).doc'
texts