test命令提供一种检查if-then语句中不同条件的方法,如果test命令中列出的条件评估值为true,test命令以0退出状态代码退出。如果条件为false,则test命令退出。
test命令能够评估以下三类条件:
数值比较
字符串比较
文件比较。
1、test数值比较
n1 -eq n2 检查n1是否等于n2
n1 -ge n2 检查n1是否大于或等于n2
n1 -gt n2 检查n1是否大于n2
n1 -le n2 检查n1是否小于或等于n2
n1 -lt n2 检查n1是否小于n2
n1 -ne n2 检查是否不等于n2
注:test命令无法处理存储在变量中的浮点值
2、字符串比较
str1 = str2 检查str1与str2是否相同
str1 != str2 检查str1与str2是否不同
str1 < str2 检查str1是否小于str2
str1 > str2 检查str1是否大于str2
-n str1 检查str1的长度是否大于0
-z str1 检查str1的长度是否为0
注:<1、大于号和小于号一定要转义,否则shell会将它们当做重定向符合,将字符串值看做文件名。
<2、大于和小于顺序与在sort命令中的顺序不同。test命令中大写字母小于小写字母。sort命令往往不同。原因是test命令使用ASCⅡ排序;sort命令使用系统当前语言定义排序顺序。
3、文件比较
shell最强大和最常使用的一类比较,能够测试linux文件系统上的文件状态和路径。
-d file 检查file是否存在并且是一个目录
-e file 检查file是否存在(检查对象可以是目录或文件)
-f file 检查file是否存在并且是一个文件
-r file检查file是否存在并且可读
-s file 检查file是否存在并且不为空
-w file 检查file是否存在并且可写
-x file 检查file是否存在并且可执行
-O file 检查file是否存在并且被当前用户拥有
-G file 检查file是否存在并且默认组是否为当前用户组
file1 -nt file2 检查file1是否比file2新(检查文件日期)
file1 -ot file2 检查file1是否比file2旧(检查文件日期)
复合条件检查
[ -d ] && [ -w ]是and关系,两个条件必须满足
[ -d ] || [ -w ]是or关系,两个条件任意一个为true