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,所以虽然第一个判断值为真,返回的结果也是假
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟敛寒林o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值