Linux学习日记 —— 11.4 Shell编程-条件判断

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,所以虽然第一个判断值为真,返回的结果也是假

你可能感兴趣的:(Linux,Linux初学者学习日记)