20.shell中的条件判断
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
📋 个人简介
💖 作者简介大家好我是小鹏linux运维领域新星创作者阿里云ACE认证高级工程师😜
📝 个人主页小鹏linux🔥
🎉 支持我点赞👍+收藏⭐️+留言📝
💬格言你未必出类拔萃但一定与众不同🔥
📕 系列专栏
🍎 阶段一windows基础 目前原创16篇
🍎 阶段二Linux基础知识 目前原创38篇
🍎 阶段三shell基础+shell高级 目前原创20篇
🍎 阶段四python基础及自动化应用 原创未开始
🍎 阶段五Linux网络服务 原创未开始
🍎 阶段六集群原理及架构 原创未开始
🍎 阶段七云计算虚拟化技术 原创未开始
目录
1、按照文件类型进行判断
测试选项 | 作用 |
-b 文件 | 判断该文件是否存在并且是否为块设备文件是块设备文件为真 块设备是I/O设备中的一类是将信息存储在固定大小的块中每个块都有自己的地址还可以在设备的任意位置读取一定长度的数据。例如U盘SD卡。 |
-c 文件 | 判断该文件是否存在并且是否为字符设备文件是字符设备文件为真 字符设备是指在I/O传输过程中以字符为单位进行传输的设备例如键盘打印机。 |
-d 文件 | 判断该文件是否存在并且是否为目录文件是目录为真 |
-e 文件 | 判断该文件是否存在存在为真 |
-f 文件 | 判断该文件是否存在并且是否为普通文件是普通文件为真 |
-L 文件 | 判断该文件是否存在并且是否为符号连接文件是符号连接文件为真 |
-p 文件 | 判断该文件是否存在并且是否为管道文件是管道文件为真 |
-s 文件 | 判断该文件是否存在并且是否为非空非空为真 |
-S 文件 | 判断该文件是否存在并且是否为套接字文件是套接字文件为真 |
&&符号命令1执行成功后执行命令2
||符号命令1执行成功则命令二不执行命令1执行失败则执行命令2
示例
[root@localhost mnt]# id toto # 用户toto不存在无法查看
id: toto: no such user
[root@localhost mnt]# id toto &> /dev/null && echo yes || echo no # 判断用户是否存在
no # 由于用户不存在 条件不成立 所以输出no
[root@localhost mnt]# useradd toto # 创建用户之后 用户存在
[root@localhost mnt]# id toto &> /dev/null && echo yes || echo no # 条件成立 输出yes
yes
测试检测是否能够ping通 主机 172.25.47.204 通则输出yes不通则输出no
编写脚本用以检测网络能否ping通
可以ping通输出此ip is up;ping不通输出 此ip is down
2、按照文件权限进行判断
测试选项 | 作用 |
-r 文件 | 判断该文件是否存在并且是否该文件拥有读权限有读权限为真 |
-w 文件 | 判断该文件是否存在并且是否该文件拥有写权限有写权限为真 |
-x 文件 | 判断该文件是否存在并且是否该文件拥有执行权限有执行权限为真 |
-u 文件 | 判断该文件是否存在并且是否该文件拥有SUID权限有SUID权限为真 |
-g 文件 | 判断该文件是否存在并且是否该文件拥有SGID权限有SGID权限为真 |
-k 文件 | 判断该文件是否存在并且是否该文件拥有SBit权限有SBit权限为真 |
3、两个文件之间进行比较
测试选项 | 作用 |
文件1 -nt 文件2 | 判断文件1的修改时间是否比文件2的新如果新则为真 |
文件1 -ot 文件2 | 判断文件1的修改时间是否比文件2的旧如果旧则为真 |
文件1 -ef 文件2 | 判断文件1是否和文件2的inode号一致可以理解为两个文件是否为同一个文件。这个判断用于判断硬链接是很好的方法。 |
示例
[ “file1” -ef “file2” ] ##两文件为同一个文件为真
[root@localhost mnt]# touch file1
[root@localhost mnt]# ln file1 file2
[root@localhost mnt]# ls
file1 file2 ping.sh
[root@localhost mnt]# ls -i
8845808 file1 8845808 file2 8845813 ping.sh
[root@localhost mnt]# [ "file1" -ef "file2" ] && echo yes || echo no
yes
[root@localhost mnt]# [ "file1" -ef "ping.sh" ] && echo yes || echo no
no
[ “file1” -nt"file2" ] ##文件1比文件2创建的晚为真
[ “file1” -ot “file2” ] ##文件1比文件2创建的早为真
[root@localhost mnt]# ll
total 0
-rw-r--r--. 1 root root 0 May 20 06:25 file1
-rw-r--r--. 1 root root 0 May 20 06:27 file2
[root@localhost mnt]# [ "file1" -nt "file2" ] && echo yes || echo no
no
[root@localhost mnt]# [ "file1" -ot "file2" ] && echo yes || echo no
yes
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小于等于为真 |
示例
1 test命令通常做判断 test 命令和 [ ] 等同
[root@localhost mnt]# a=1
[root@localhost mnt]# b=1
[root@localhost mnt]# test "$a" = "$b" && echo yes || echo no
yes
[root@localhost mnt]# [ "$a" = "$b" ] && echo yes || echo no
yes
[root@localhost mnt]# test "$a" != "$b" && echo yes || echo no
no
[root@localhost mnt]# [ "$a" != "$b" ] && echo yes || echo no
no
2 -eq ##等于
[root@localhost mnt]# a=1
[root@localhost mnt]# b=1
[root@localhost mnt]# [ "$a" = "$b" ] && echo yes || echo no
yes
[root@localhost mnt]# [ "$a" -eq "$b" ] && echo yes || echo no
yes
3 -ne ##不等于
[root@localhost mnt]# a=1
[root@localhost mnt]# b=1
[root@localhost mnt]# [ "$a" -ne "$b" ] && echo yes || echo no
no
[root@localhost mnt]# b=2
[root@localhost mnt]# [ "$a" -ne "$b" ] && echo yes || echo no
yes
4 -le ##小于等于
[root@localhost mnt]# a=1
[root@localhost mnt]# b=2
[root@localhost mnt]# [ "$a" -le "$b" ] && echo yes || echo no
yes
[root@localhost mnt]# b=1
[root@localhost mnt]# [ "$a" -le "$b" ] && echo yes || echo no
yes
[root@localhost mnt]# b=0
[root@localhost mnt]# [ "$a" -le "$b" ] && echo yes || echo no
no
5 -lt ##小于
[root@localhost mnt]# a=1
[root@localhost mnt]# b=2
[root@localhost mnt]# [ "$a" -lt "$b" ] && echo yes || echo no
yes
[root@localhost mnt]# b=1
[root@localhost mnt]# [ "$a" -lt "$b" ] && echo yes || echo no
no
6 -ge ##大于等于
[root@localhost mnt]# a=1
[root@localhost mnt]# b=2
[root@localhost mnt]# [ "$a" -ge "$b" ] && echo yes || echo no
no
[root@localhost mnt]# a=2
[root@localhost mnt]# [ "$a" -ge "$b" ] && echo yes || echo no
yes
[root@localhost mnt]# a=3
[root@localhost mnt]# [ "$a" -ge "$b" ] && echo yes || echo no
yes
7 -gt ##大于
[root@localhost mnt]# a=1
[root@localhost mnt]# b=1
[root@localhost mnt]# [ "$a" -gt "$b" ] && echo yes || echo no
no
[root@localhost mnt]# a=2
[root@localhost mnt]# [ "$a" -gt "$b" ] && echo yes || echo no
yes
8 -a ##同时满足
[root@localhost mnt]# a=1
[root@localhost mnt]# b=2
[root@localhost mnt]# c=3
[root@localhost mnt]# [ "$a" -lt "$b" -a "$b" -lt "$c" ] && echo yes || echo no
yes
[root@localhost mnt]# b=1
[root@localhost mnt]# [ "$a" -lt "$b" -a "$b" -lt "$c" ] && echo yes || echo no
no
9 -o ##两个条件满足其中一个就可以
[root@localhost mnt]# a=1
[root@localhost mnt]# b=2
[root@localhost mnt]# c=3
[root@localhost mnt]# [ "$a" -lt "$b" -o "$b" -gt "$c" ] && echo yes || echo no
yes
[root@localhost mnt]# [ "$a" -gt "$b" -o "$b" -gt "$c" ] && echo yes || echo no
no
10 -z ##是否为空
[root@localhost mnt]# c=''
[root@localhost mnt]# [ -z "$c" ] && echo yes || echo no
yes
[root@localhost mnt]# c=2
[root@localhost mnt]# [ -z "$c" ] && echo yes || echo no
no
11 -n ##不为空
[root@localhost mnt]# c=''
[root@localhost mnt]# [ -n "$c" ] && echo yes || echo no
no
[root@localhost mnt]# c=2
[root@localhost mnt]# [ -n "$c" ] && echo yes || echo no
yes
5、字符串的判断
测试选项 | 作用 |
-z 字符串 | 判断字符串变量是否为空为空返回真 |
-n 字符串 | 判断字符串变量是否为非空非空返回真 |
字串1 == 字串2 | 判断字符串1变量是否和字符串2变量相等相等返回真 |
字串1 = 字串2 | 判断字符串1变量是否和字符串2变量不相等不相等返回真 |
6、多重条件判断
测试选项 | 作用 |
判断1 -a 判断2 | 逻辑与判断1和判断2都成立最终的结果才为真。 |
判断1 -o 判断2 | 逻辑或判断1和判断2有一个成立最终的结果就为真。 |
逻辑非使原始的判断式取反。 |