1. 按照文件类型进行判断
判断选项 | 作用 |
---|---|
-b 文件 | 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真)。 |
-c 文件 | 判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真)。 |
-d 文件 | 判断该文件是否存在,并且是否为目录文件(是目录文件为真)。 |
-e 文件 | 判断该文件是否存在(存在为真)。 |
-f 文件 | 判断该文件是否存在,并且是否为普通文件(是普通文件为真)。 |
-L 文件 | 判断该文件是否存在,并且是否为符号链接文件(是符号链接文件为真)。 |
-p 文件 | 判断该文件是否存在,并且是否为管道文件(是管道文件为真)。 |
-s 文件 | 判断该文件是否存在,并且是否为非空(非空为真)。 |
-S 文件 | 判断该文件是否存在,并且是否为套接字文件(是套接字文件为真)。 |
判断格式有两种:
[root@localhost ~]# test -e /root/install.log
[root@localhost ~]# [ -e /root/install.log ]
注意:[ ] 内部两侧都必须有空格。
预定义变量$?中保存了上一条命令的执行结果(0表示执行正确;非0表示执行错误)。
因此,可用 $? 知道上一条命令的执行(判断)结果(0表示存在,非0表示不存在)。
示例:
[root@localhost ~]# test -e /root/install.log
[root@localhost ~]# echo $?
[root@localhost ~]# [ -e /root/install.log123 ]
[root@localhost ~]# echo $?
[root@localhost ~]# [ -d /root ] && echo "yes" ||
[root@localhost ~]# echo "no"
如果/root是目录,则打印yes,否则,打印no。
# 输出yes
[root@localhost ~]# [ -e /root ] && echo yes ||
[root@localhost ~]# echo no
判断/root是否存在。
# 输出yes
[root@localhost ~]# [ -f /root ] && echo yes ||
[root@localhost ~]# echo no
判断/root是否为普通文件。
# 输出no
2. 按照文件的权限进行判断
只要所有者、所属组、其他人中的任何一个用户有相应的权限,判断结果就为真。
判断选项 | 作用 |
---|---|
-r 文件 | 判断文件是否存在,并且是否有读权限。 |
-w 文件 | 判断文件是否存在,并且是否有写权限。 |
-x 文件 | 判断文件是否存在,并且是否有执行权限。 |
-u 文件 | 判断文件是否存在,并且是否有SUID权限。(有SUID权限为真) |
-g 文件 | 判断文件是否存在,并且是否有SGID权限。(有SGID权限为真) |
-k 文件 | 判断文件是否存在,并且是否有SBIT权限。(有Sbit权限为真) |
示例:
[root@localhost ~]# [ -w /root/a.txt ] && echo yes || echo no
文件/root/a.txt如果有写权限,则输出yes,否则,输出no。
3. 两个文件之间进行比较
判断选项 | 作用 |
---|---|
文件1 -nt 文件2 | 判断文件1的修改时间是否比文件2的新(新则为真)。 |
文件1 -ot 文件2 | 判断文件1的修改时间是否比文件2的旧(旧则为真)。 |
文件1 -ef 文件2 | 判断文件1是否和文件2的inode号一致,可以理解为两个文件是否为同一文件。这个判断是用于判断硬链接很好的方法 。 |
示例:
[root@localhost ~]# ln /root/a.txt /root/an.txt
为a.txt文件创建一个硬链接an.txt文件。
某个文件的硬链接的inode号和该文件自身的inode号一致。
[root@localhost ~]# ll -i /root/an.txt
查看an.txt文件的inode节点号。
[root@localhost ~]# [ /root/a.txt -ef /root/an.txt ] && echo yes || echo no
4. 两个整数之间的比较
判断选项 | 作用 |
---|---|
整数1 -eq 整数2 | 判断整数1是否和整数2相等。(相等为真) |
整数1 -ne 整数2 | 判断整数1是否和整数2不相等。(不相等为真) |
整数1 -gt 整数2 | 判断整数1是否大于整数2。(大于为真) |
整数1 -lt 整数2 | 判断整数1是否小于整数2。(小于为真) |
整数1 -ge 整数2 | 判断整数1是否大于等于整数2。(大于等于为真) |
整数1 -le 整数2 | 判断整数1是否小于等于整数2。(小于等于为真) |
示例:
[root@localhost ~]# [ 63 -ge 45 ] && echo yes || echo no
5. 字符串的判断
判断选项 | 作用 |
---|---|
-z 字符串 | 判断字符串是否为空。(为空返回真) |
-n 字符串 | 判断字符串是否为非空。(非空返回真) |
字符串1 == 字符串2 | 判断字符串1是否和字符串2相等。(相等返回真)也可用单个=进行判断。(推荐用==) |
字符串1 != 字符串2 | 判断字符串1是否和字符串2不相等。(不相等返回真) |
说明: 可用 [ -z $变量名 ] 来判断变量的值是否为空。
示例:
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# [ "$aa" == "$bb" ] && echo "yes" || echo "no"
# 判断两个变量的值是否相等,明显不相等,输出no
6. 多重条件判断
判断选项 | 作用 |
---|---|
判断1 -a 判断2 | 逻辑与。判断1和判断2都为真,最终的结果才为真。 |
判断1 -o 判断2 | 逻辑或。判断1和判断2有一个为真,最终的结果就为真。 |
! 判断 | 逻辑非。将原始的判断结果取反。 |
示例:
aa=11
[root@localhost ~]# [ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"
# 输出no
# 判断变量aa是否有值,同时判断变量aa是否大于23
# 因为变量aa的值不大于23,所以虽然第一个判断值为真,返回的结果也是假