Shell编程之判断条件

本文详细介绍了如何在Shell编程中进行各种条件判断,包括文件类型、文件权限、文件比较、整数比较、字符串判断及多重条件判断的实践示例。
摘要由CSDN通过智能技术生成

1、按照文件类型进行判断

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

例子:

# 判断/dev/sdb是否存在且为块设备文件,存在且为块设备输出true,反之输出false
[root@localhost ~]# [ -b /dev/sdb ] && echo 'true' || echo 'false'
true
# 判断/etc/profile是否存在,存在输出true,不存在输出false
[root@localhost ~]# [ -e /etc/profile ] && echo 'true' || echo 'false'
true
# 判断/etc/profile是否存在且为目录,存在且为目录输出true,反之输出false
[root@localhost ~]# [ -d /etc/profile ] && echo 'true' || echo 'false'
false
# 判断/etc/profile是否存在且为普通文件,存在且为普通文件输出true,反之输出false
[root@localhost ~]# [ -f /etc/profile ] && echo 'true' || echo 'false'
true
# 判断/etc/rc.local是否存在且为链接文件,存在且为链接文件输出true,反之输出false
[root@localhost ~]# [ -L /etc/rc.local ] && echo 'true' || echo 'false'
true

2、按照文件权限进行判断

测试选项作用
-r 文件判断该文件是否存在,并且该文件对于当前用户是否拥有读权限(有读权限为真)
-w 文件判断该文件是否存在,并且该文件对于当前用户是否拥有写权限(有写权限为真)
-x 文件判断该文件是否存在,并且该文件对于当前用户是否拥有执行权限(有执行权限为真)
-u 文件判断该文件是否存在,并且该文件对于当前用户是否拥有SUID权限(有SUID权限为真)
-g 文件判断该文件是否存在,并且该文件对于当前用户是否拥有SGID权限(有SGID权限为真)
-k 文件判断该文件是否存在,并且该文件对于当前用户是否拥有SBIT权限(有SBIT权限为真)
例子:
# 创建一个权限为600的测试文件
[root@localhost tmp]# ll
total 0
-rw------- 1 root root  0 Jun  2 14:22 test.log
# root对其有r权限,所以会打印true
[root@localhost tmp]# [ -r /tmp/test.log ] && echo 'true' || echo 'false'
true
# 普通用户user1对其无r权限,所以会打印false
[user1@localhost ~]$ [ -r /tmp/test.log ] && echo 'true' || echo 'false'
false

3、两个文件之间进行比较

测试选项作用
文件1 -nt 文件2判断文件1的修改时间是否比文件2的新(如果新则为真)
文件1 -ot 文件2判断文件1的修改时间是否比文件2的旧(如果旧则为真)
文件1 -ef 文件2判断文件1与文件2的Inode号是否一致,可以理解为判断是否为同一个文件。对于用于判断硬链接。
例子:
# 创建一个test1的硬链接test2
[root@localhost tmp]# ln test1 test2
[root@localhost tmp]# ll
total 0
-rw-r--r-- 2 root root  0 Jun  2 14:35 test1
-rw-r--r-- 2 root root  0 Jun  2 14:35 test2
# 判断test1与test2是否为同一文件
[root@localhost tmp]# [ /tmp/test1 -ef /tmp/test2 ] && echo 'true' || echo 'false'
true

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(小于等于为真)
例子:
# 35等于35为真,故打印true
[root@localhost tmp]# [ 35 -eq 35 ] && echo 'true' || echo 'false'
true
# 35大于35为假,故打印false
[root@localhost tmp]# [ 35 -gt 35 ] && echo 'true' || echo 'false'
false
# 35不等于35位假,故打印false
[root@localhost tmp]# [ 35 -ne 35 ] && echo 'true' || echo 'false'
false

5、字符串判断

测试选项作用
-z 字符串判断字符串是否为空(为空返回真)
-n 字符串判断字符串是否为非空(非空返回真)
字符串1 == 字符串2判断字符串1是否和字符串2相等(相等返回真)
字符串1 != 字符串2判断字符串1是否和字符串2不相等(不相等返回真)
例子:
# 设置一个为空的变量name
[root@localhost ~]# name=""
# 判断name是否为空,为空则打印true,反之打印false
[root@localhost ~]# [ -z $name ] && echo 'true' || echo 'false'
true
# 设置变量name、name2
[root@localhost ~]# name=‘tom’
[root@localhost ~]# name2=‘tom’
# 判断name和name2是否相等,相等打印true、反之打印false
[root@localhost ~]# [ $name == $name2 ] && echo 'true' || echo 'false'
true

6、多重条件判断

测试选项作用
判断1 -a 判断2逻辑与,判断1和判断2都成立,最终结果为真
判断1 -o 判断2逻辑或,判断1和判断2有一个成立,最终结果为真
! 判断逻辑非,使原始判断取反
例子:
# 设置变量name
[root@localhost ~]# name='tom'
# 判断变量name是否为空且变量name的值是否等于'tom',如果不为空且等于‘tom’则打印true,反之有一个条件没满足打印false
[root@localhost ~]# [ -n $name -a $name == 'tom' ] && echo 'true' || echo 'false'
true
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值