test命令可以判断三类条件
- 数值比较
- 字符串比较
- 文件比较
test是shell内置命令,用来检测某个条件是否成立
test通常和if语句一起使用,并且大部分if语句都依赖test
shell test命令的用法有两种:
第一种:
test expression #当test判断expression成立时,退出状态为0,否则为非0值
第二种:
[ expression ] #[ ]和expression的两边都有空格,这个空格是必须的,否则会导致语法错误
#[ ]写法更简洁,使用频率更高
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:
- 例2:
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 |
比较字符串是否相等
- test比较字符串相等性时会将所有的标点和大写也考虑在内
- 方法:
[ str1 = str2 ]
[ str1 != str2 ]
- 例1:
- 例2:
比较字符串的大小
- 字符串大小的比较遵循字典顺序,规则如下:
- 1.如果第一个字符串是第二个字符串的前缀,那么第一个小(比如a小于about)
- 2.从字符串的开头比较,按照字母顺序,a比b小(比如about小于ball)
- 3.如果第一个字符相同,再比较第二个(比如about小于above)
- 方法:
[ str1 < str2 ]
[ str1 > str2 ]
- 例:
比较字符串的长度
- 没有被定义的字符串长度默认为0
- 方法:
[ -n str1 ] #检查str1的长度是否非0
[ -z str1 ] #检查str1的长度是否为0
- 例:
3.文件的比较:
比较 | 说明 |
---|---|
-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旧 |
检查file是否存在并是一个目录
- 此处的$HOME是shell中的环境变量
- 例:
-e检查file是否存在
- 例:
-f检查file是否存在并是一个文件
- 例:
-r检查文件是否存在并可读
- 例:
可读:
不可读:
-s检查文件是否存在并为非空
- 例:
第一次执行:
第二次执行:
-w检查文件是否存在并可写
- 例:
执行时使用普通用户:
-x检查文件是否存在并可执行
- 例:
-O检查file是否存在并属当前用户所有
- 例:
-G检查文件是否存在并且默认组与当前用户相同
比较文件的新旧
- 例:
多个条件同时比较
- 例:
test命令中可使用变量
- 在test中使用变量需要用双方括号包围[[ ]]
- 例: