目 录CONTENT

文章目录

整理收藏:shell中的test条件测试

ZOUNAN
2022-04-25 / 0 评论 / 1 点赞 / 182 阅读 / 1,368 字
温馨提示:
本文最后更新于 2022-04-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

shell编程中经常会有很多需要逻辑判断的地方,比如一个文件/文件夹是否存在,字符串是否为空等等,而test就具有这样的优良传统,将我们需要的结果通过简单的表达式查询,从而通过状态码$?取值。

1.对文件类型的检测

-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:判断该【文件名】是否为连结档

2.对文件权限的侦测

如:test -r file1

比如判断一个文件是否具有可读、可写之类的检测方法:

-r:判断该【文件名】是否具有可读属性
-w:判断该【文件名】是否具有可写属性
-x:判断该【文件名】是否具有可执行属性
-u:判断该【文件名】是否具有suid属性
-g:判断该【文件名】是否具有sgid属性
-k:判断该【文件名】是否具有Sticky bit属性
-s:判断该【文件名】是否为非空白文件

3.两个文件之前的比较

如:test file1 -nt file2

比如判断两个文件之间的新旧关系,也可以使用test命令来实现。

-nt:(newer than)判断file1 是否比 file2 新
-ot:(older than)判断file1 是否比 file2 旧
-ef:判断file1和file2是否为同一文件,主要用于判断文件是否指向同一个inode

4.两个整数之间的判断

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)

5.判断字符串的数据

test -z string 判定字符串是否为0?若为空字符串,则为true
test -n string 判定字符串是否为非0?若为空字符串,则为false
test str1 = str2 判定字符串 str1 是否等于 str2,若相等,则回传true
test str1 != str2 判定字符串 str1 是否不等于 str2,若相等,则回传false

6.多重条件判断

  • -a (and) 两种条件同时成立!
# file同时具有r和x的权限,才回传true
test -r file -a -x file
  • -o (or) 两状况任何一个成立!
# file具有r或x权限时,才回传true
test -r file -o -x file
  • ! 反相状态
# 当file不具有x时,回传true
test ! -x file

大家可以自行测试一下上面的命令,晚安!

1

评论区