shell中的测试条件有三种:test,[ ]以及(( ))。其中test和[ ]是等价的(test -z str 等价于 [ -z str ]),因此将二者归为一类讨论
[ ]
1.[ ]的测试对象有三种:
- 字符串 ,如[ -z str ]
- 数字,如[ n1 -lt n2 ]
- 文件,如[ -f filename ]
2.
中括号内的变量,最好用双引号包括; 中括号内的常量,最好用单引号或双引号包括。如
if [ -z ${var} ] #可能出错
if [ -z "${var}" ] #最好改成这样
3.-a(与)和-o(或):进行多重条件的复合测试,如
if [ -n "${var}" -a "${var}" -lt 100 ] #当变量被定义且其值小于100时
4.取反测试!:对测试条件取反
if [ ! "$?" -eq "0" ] #上一条命令返回值不等于0
(( ))
1.(( ))作测试条件用时其中可使用类C的数字测试条件,包括
- < :小于
- > :大于
- <= :小于等于
- >= :大于等于
- == :等于
- != :不等于
2.经测试,(( ))中不能用-a,-o以及!等复合测试
3.(( ))除用作数值测试之外,还可用于变量自增减,如(( var++ ))
测试条件的应用
在shell中,测试条件主要用于以下两个方面:
1.if,while以及until等语句
2.&&和||
command返回值和测试条件之间的关系
可以看到,command返回值和测试条件结果都是True或者False,因此二者应用场合一样,即command返回值也可以用于if,&&和||
譬如
if command 1; then
command 2
else
command 3
fi
和
command 1 && {
command 2
} || { #这里注意||的位置,不能错
command 3
}
是等价的