Shell条件判断 条件判断式

引用变量要加””

按文件类型判断

测试选项 作用
-b 判断该文件是否存在,并且是否为块设备文件(是为真)
-c 判断该文件是否存在,并且是否为字符设备文件(是为真)
-d 判断该文件是否存在,并且是否为目录文件(是为真)
-e 判断该文件是否存在(存在为真)
-f 判断该文件是否存在,并且是否为普通文件(是为真)
-L 判断该文件是否存在,并且是否为符号链接文件(是为真)
-p 判断该文件是否存在,并且是否为管道文件(是为真)
-s 判断该文件是否存在,并且是否为非空(非空为真)
-S 判断该文件是否存在,并且是否为套接字文件(是为真)

两种判断格式

1
2
[-e /root/install.log] #常用
test -e /root/install.log

[-e /root/install.log] && echo yes || echo no
第一个判断命令如果正确执行,则打印yes,否则打印no
&& 和 || 不可以调换位置


按文件权限判断

测试选项 作用
-r 判断该文件是否存在,并且是否该文件拥有读权限(有为真)
-w 判断该文件是否存在,并且是否该文件拥有写权限(有为真)
-x 判断该文件是否存在,并且是否该文件拥有执行权限(有为真)
-u 判断该文件是否存在,并且是否该文件拥有SUID权限(有为真)
-g 判断该文件是否存在,并且是否该文件拥有SGID权限(有为真)
-k 判断该文件是否存在,并且是否该文件拥有SBit权限(有为真)


两个文件之间的比较

测试选项 作用
file1 -nt file2 判断文件1的修改时间是否比文件2的新(如果新则为真)
file1 -ot file2 判断文件1的修改时间是否比文件2的旧(如果旧则为真)
file1 -ef file2 判断文件1是否比文件2的Inode号一致,可以理解为两个文件是否为同一个文件。这个判断用于判断硬链接是很好的办法


两个整数之间的比较

测试选项 作用
num1 -eq num2 判断整数1是否和整数2相等(相等为真)
num1 -ne num2 判断整数1是否和整数2不相等(不相等为真)
num1 -gt num2 判断整数1是否大于整数2(大于为真)
num1 -lt num2 判断整数1是否小于整数2(小于为真)
num1 -ge num2 判断整数1是否大于或等于整数2(大于等于为真)
num1 -le num2 判断整数1是否小于或等于整数2(小于等于为真)


字符串的判断

测试选项 作用
-z 字符串 判断字符串是否为空,为空返回真
-n 字符串 判断字符串是否为非空,非空返回真
字符串1 == 字符串2 判断两字符串是否相等,相等返回真,==左右加空格
字符串1 != 字符串2 判断两字符串是否不相等,不相等返回真,!=左右加空格


多重条件判断

测试选项 作用
判断1 -a 判断2 #逻辑与,判断1和判断2都成立,结果为真
判断1 -o 判断2 #逻辑或,判断1和判断2有一个成立,结果就为真
!判断 #逻辑非,判断结果取反
1
[-n "$a" -a "$a" -gt 23]