test:
test语句可以测试三种对象
字符串 整数 文件
test 测试成功 返回 0
测试不成功 返回 1
test测试字符串
= 测试两个字符串内容是否一致
若内容一致则返回0,否则返回1
![](https://img-blog.csdnimg.cn/img_convert/33bc76c4e8f14ca7b6ca07ecf54a49c5.png)
这里注意:判断时使用单个等号;等号两边需要有空格
!= 测试两个字符串是否不一致
若内容一致则返回1,否则返回0
![](https://img-blog.csdnimg.cn/img_convert/67e58d26629b48f09860de79d58b81da.png)
test -z 测试字符串是否为空
![](https://img-blog.csdnimg.cn/img_convert/99d1d097604749b596fb6d415a235f5d.png)
若字符串为空则返回0,否则返回1
test -n 测试字符串是否不为空
![](https://img-blog.csdnimg.cn/img_convert/e25badd79e4f409ea18f083fa2d32103.png)
若字符串为空则返回1,否则返回0
${var}x 防止字符串为空
![](https://img-blog.csdnimg.cn/img_convert/f38b2a7bd31a456a8ffeb1d610f55918.png)
上图中,按照规则test -n 判断str是否不为空,应当测试失败返回1,但是shell认为未给值,因此导致判断失误
![](https://img-blog.csdnimg.cn/img_convert/dbc289431cfa461a850de883c8747cc1.png)
可以看到,对输入的var1与未给值的var2两个变量进行两次对比:
test var1 = var2
test ${var1}x = ${var2}x
第一次对比,无论输入空格还是字符串都返回1,第二对比却能识别未给值的var2
test测试整数
a -eq b equal测试两个整数是否是相等的 ==
a -ne b not equal测试两个整数是否不相等 !=
a -gt b greater than >
a -ge b greater equal >=
a -lt b litter than <
a -le b litter equal <=
![](https://img-blog.csdnimg.cn/img_convert/cae5ebd465e742739b5cdc1f11e7a2ad.png)
test测试文件
test +
-d filename 测试filename是否为目录 (directory)
-f filename 测试filename是否为普通文件 (file)
-l filename 测试filename是否为链接文件 (link)
-r filename 测试filename是否存在并且可读 (read)
-w filename 测试filename是否存在并且可写 (write)
-x filename 测试filename是否存在并且可执行 (execute)
-s filename 测试filename是否存在并且长度不为0 (size)
f1 -nt f2 测试f1是否比f2更新 nt newer than
f1 -ot f2 测试f1是否比f2更旧 ot older than
test简写形式
test命令可以用[]来简写,但是,命令与中括号之间需要有空格
test expression <==> [ expression ]
test ${var1} = ${var2} ==> [ ${var1} = ${var2} ]
test的组合-->符合表达式
组合两个或两个以上的表达式称为符合表达式,为了使用符合表达式,你可以用test([])内置的操作符,也可以用条件操作符。
#实现5>4>3
#用内置操作符
#-a==>and
#-o==>or
test 5 -gt 4 -a 4 -gt 3
#用条件操作符
[ 5 -gt 4 ] && [ 4 -gt 3 ]