Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符串和文件三个方面的测试。
test命令可以判断三类条件:
数值比较
字符串比较
文件比较
1.1数值比较 可以用在数字和变量上比较 | 描述 |
---|---|
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 | 检查n1是否不等于n2 |
例1: 比较变量的值和数字的大小,比较变量的值和变量的值的大小
方法一:比较 | 说明 |
---|---|
str1 = str2 | 检查str1是否和str2相同 |
str1 != str2 | 检查str1是否和str2不同 |
str1 < str2 | 检查str1是否比str2小 |
str1 > str2 | 检查str1是否比str2大 |
-n str1 | 检查str1的长度是否非0 |
-z str1 | 检查str1的长度是否为0 |
方法:
[ str1 str2 ]
注意:这里比较的是字符串,而不是字符串的长度
字符串大小的比较遵循字典顺序,规则如下:例2: 判断两个字的字符串的大小(大于小于比较)
错误写法,不转义大于号时,shell会将 > 识别为输出重定向,它会创建hockey文件。因为系统会执行重定向(if后面)的语句,所以退出状态为0,判断条件为真,所以会执行then后面的语句。比较 | 说明 |
---|---|
-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 | file2 检查file1是否比file2新 |
file1 -ot file2 | file2 检查file1是否比file2旧 |
例1: 判断目录是否存在(-d)
例2: 判断文件是否存在(-e)
例3: 判断文件是否存在并且是一个普通文件(-f)
例4: 判断文件是否可读(-r)
例5: 如果文件是否存在并且非空(-s)
当在文件中追加数据时
例6: 如果文件存在且可写为真(-w)
测试此文件 需要切换至普通用户
例7: 测试文件是否可执行(-x)
:
例8: 判断文件是否存在并且属于当前用户所有(-O)
例9: 判断文件是否存在并且默认组与当前用户的相同(-G)
例10: 判断文件的创建时间的早晚(新旧)(-nt|-ot)
例1:
例1: