整理收藏shell中的test条件测试,脚本开发必会
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
大家可以自行测试一下上面的命令,晚安!