https://zhuanlan.zhihu.com/p/504991399
shell编程中经常会有很多需要逻辑判断的地方,比如一个文件/文件夹是否存在,字符串是否为空等等,而test就具有这样的优良传统,将我们需要的结果通过简单的表达式查询,从而通过状态码$?取值。
-e:判断文件/目录是否存在,存在为0(真),否则为非0(假)
简单演示,如果一个文件(目录)存在,返回0
[root@blog ~]# test -e /tmp/
[root@blog ~]# echo $?
0
如果一个文件(目录)不存在,返回非0,比如我这里返回为1,说明该文件(目录)不存在。
[root@blog ~]# test -e /aabbcc1232432432
[root@blog ~]# echo $?
1
补充前两个参数,可以更具体的判断文件或文件夹是否存在
-f:判断该【文件名】是否为文件
-d:判断该【文件名】是否为目录
-b:判断该【文件名】是否为block device
-c:判断该【文件名】是否为character device
-S:判断该【文件名】是否为socket device
-P:判断该【文件名】是否为FIFO(pipe)文件
-L:判断该【文件名】是否为连结档
如:test -r file1
比如判断一个文件是否具有可读、可写之类的检测方法:
-r:判断该【文件名】是否具有可读属性
-w:判断该【文件名】是否具有可写属性
-x:判断该【文件名】是否具有可执行属性
-u:判断该【文件名】是否具有suid属性
-g:判断该【文件名】是否具有sgid属性
-k:判断该【文件名】是否具有Sticky bit属性
-s:判断该【文件名】是否为非空白文件
如:test file1 -nt file2
比如判断两个文件之间的新旧关系,也可以使用test命令来实现。
-nt:(newer than)判断file1 是否比 file2 新
-ot:(older than)判断file1 是否比 file2 旧
-ef:判断file1和file2是否为同一文件,主要用于判断文件是否指向同一个inode
test n1 -eq n2
test还可用于两个整数之间的判断。
-eq:判断两数值相等(equal)
-ne:判断两数值不相等(noe equal)
-gt:n1 大于 n2(greater than)
-lt:n1 小于 n2(less than)
-ge:n1 大于等于 n2(greater than or equal)
-le:n1 小于等于 n2(less than or equal)
test -z string 判定字符串是否为0?若为空字符串,则为true
test -n string 判定字符串是否为非0?若为空字符串,则为false
test str1 = str2 判定字符串 str1 是否等于 str2,若相等,则回传true
test str1 != str2 判定字符串 str1 是否不等于 str2,若相等,则回传false
# file同时具有r和x的权限,才回传true
test -r file -a -x file
# file具有r或x权限时,才回传true
test -r file -o -x file
# 当file不具有x时,回传true
test ! -x file
大家可以自行测试一下上面的命令,晚安!