test:
test语句可以测试三种对象
字符串 整数 文件
test 测试成功 返回 0
测试不成功 返回 1
test测试字符串
= 测试两个字符串内容是否一致
若内容一致则返回0,否则返回1

这里注意:判断时使用单个等号;等号两边需要有空格
!= 测试两个字符串是否不一致
若内容一致则返回1,否则返回0

test -z 测试字符串是否为空

若字符串为空则返回0,否则返回1
test -n 测试字符串是否不为空

若字符串为空则返回1,否则返回0
${var}x 防止字符串为空

上图中,按照规则test -n 判断str是否不为空,应当测试失败返回1,但是shell认为未给值,因此导致判断失误

可以看到,对输入的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 <=

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 ]