对文件、字符串和数字使用test命令。
对数字和字符串使用expr命令。
expr命令测试和执行数值输出。使用最后退出状态命令$?可测知test和expr,二者均以0表示正确,1表示返回错误。


test

格式 test condition或[ condition ]

-d目录

-s文件长度大于0、非空
-f正规文件
-L符号连接

-u文件有suid位设置

-w可写

-r可读

-x可执行

例如:ls -l aa.txt   [ -w aa.txt ] echo $?  


测试时使用逻辑操作符

测试文件状态是否为ok,但是有时要比较两个文件状态。shell提供三种逻辑操作完成此
功能。
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。

例如: [ -w aa.txt -a -w bb.txt ]


字符串测试

= 两个字符串相等。
!= 两个字符串不等
-z 空串。
-n 非空串

例如:test [ -z $EDITOR ]  [ $EDITOR=vi ]


测试数值

测试数值可以使用许多操作符,一般格式如下:
"number" number coperator" number "
或者
[ "number number coperator " number" ]
number coperator可为:
-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。

例如:number=130  [ "$number" -eq "130" ] 也可以直接比较数值 或者加入逻辑操作


expr

expr命令一般用于整数值,但也可用于字符串。一般格式为:
expr argument operator argument
expr也是一个手工命令行计数器。

expr 10 + 10

使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。\*


增量计算

expr在循环中用于增量计算。首先,循环初始化为0,然后循环值加1,反引号的用法意
即替代命令。最基本的一种是从(expr)命令接受输出并将之放入循环变量

loop=0
loop=`expr $loop + 1`


数值测试
可以用expr测试一个数。如果试图计算非整数,将返回错误。

expr aa + 1

这里需要将一个值赋予变量(不管其内容如何),进行数值运算,并将输出导入dev/null,
然后测试最后命令状态,如果为0,证明这是一个数,其他则表明为非数值。

value=10

expr $value + 2 > /dev/null 2>&1

echo $?


模式匹配

expr也有模式匹配功能。可以使用expr通过指定冒号选项计算字符串中字符数。. *意即任
何字符重复0次或多次