shell编程之条件判断式语句

本文深入讲解了Shell脚本中各种条件判断语句的使用方法,包括文件类型、文件权限、文件时间、整数比较及字符串判断,通过实例演示了如何在脚本中灵活运用这些条件判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概述

计算机不能主观去判断,只能靠人去告诉它,如果是这种情况,要怎么去做,另一种情况要怎么去做,这就有了条件判断式语句

2.按照文件类型进行判断

格式

test 选项 文件
或
[选项 文件]

选项

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

练习:

[root@catyuan ~]# ls
anaconda-ks.cfg  Documents  initial-setup-ks.cfg  Pictures  student    Videos
Desktop          Downloads  Music                 Public    Templates
[root@catyuan ~]# [ -e student ]
[root@catyuan ~]# echo $?		##0代表上一条命令正确执行,其他代表没有正确执行
0
[root@catyuan ~]# [ -e student ] && echo "yes" || echo "no"	##正确执行yes,不正确执行no
yes

3.按照文件权限判断

格式

[ 选项 文件]

选项

-r:判断该文件是否存在,并且该文件是否拥有读权限
-w:判断该文件是否存在,并且该文件是否拥有写权限
-x:判断该文件是否存在,并且该文件是否拥有执行权限
-u:判断该文件是否存在,并且该文件是否拥有SUID权限
-g:判断该文件是否存在,并且该文件是否拥有SGID权限
-k:判断该文件是否存在,并且该文件是否拥有SBIT权限

练习

[root@catyuan ~]# ll
total 12
-rw-------. 1 root root 2084 Nov 13  2018 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Nov 13  2018 Desktop
drwxr-xr-x. 2 root root    6 Nov 13  2018 Documents
drwxr-xr-x. 2 root root    6 Nov 13  2018 Downloads
-rw-r--r--. 1 root root 2177 Nov 13  2018 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 Nov 13  2018 Music
drwxr-xr-x. 2 root root    6 Nov 13  2018 Pictures
drwxr-xr-x. 2 root root    6 Nov 13  2018 Public
-rw-r--r--. 1 root root  142 Jun 20 02:32 student
drwxr-xr-x. 2 root root    6 Nov 13  2018 Templates
drwxr-xr-x. 2 root root    6 Nov 13  2018 Videos
[root@catyuan ~]# [ -w student ] && echo yes || echo no
yes

4. 两个文件直接进行比较

格式

[ 文件1 选项 文件2 ]

选项

文件1 -nt 文件2 :判断文件1的修改时间是否比文件2的新
文件1 -ot 文件2 :判断文件1的修改时间是否比文件2的旧
文件1 -ef 文件2 :判断文件1是否和文件2的iNode号一致,可以理解为两个文件是否为同一文件。这个判断是用 于判断硬链接是很好的办法

练习

[root@catyuan ~]# ln /root/student /tmp/student
[root@catyuan ~]# [ /root/student -ef /tmp/student ] && echo yes || echo no
yes
[root@catyuan ~]# ll -i /root/student 
33574979 -rw-r--r--. 2 root root 142 Jun 20 02:32 /root/student
[root@catyuan ~]# ll -i /tmp/student 
33574979 -rw-r--r--. 2 root root 142 Jun 20 02:32 /tmp/student

5. 两个整数之间进行比较

格式

[ 整数1 选项 整数2 ]

选项

-eq:判断整数1是否和整数2相等
-ne:判断整数1是否和整数2不相等
-gt:判断整数1是否大于整数2
-lt:判断整数1是否小于整数2
-ge:判断整数1是否大于等于整数2
-le:判断整数1是否小于等于整数

6. 字符串的判断

格式

[ 选项 字符串 ]

选项

-z:判断字符串是否为空
-n:判断字符串是否为非空
==:判断两个字符串是否相等
!=:判断两个字符是否不等

练习

[root@catyuan ~]# name=cat
[root@catyuan ~]# [ -z $name ] && echo yes || echo no
no
[root@catyuan ~]# name=""
[root@catyuan ~]# [ -z $name ] && echo yes || echo no
yes

[root@catyuan ~]# a=1
[root@catyuan ~]# b=2
[root@catyuan ~]# [ "$a"=="$b" ] && echo yes || echo no	##等号左右两边要有空格
yes
[root@catyuan ~]# [ "$a" == "$b" ] && echo yes || echo no 
no

7. 多重条件判断

格式

判断1 选项 判断2

选项

-a:逻辑与,判断1和判断2都成立,最终的结果才为真
-o:逻辑或,判断1和判断2有一个成立,最终的结果就为真
!:逻辑非,是原始的判断式取反

练习

判断变量a是否有值,并且判断变量a的值是否大于23
[root@catyuan ~]# a=1
[root@catyuan ~]# [ -n "$a" -a "$a" -gt 23 ] && echo yes || echo no
no
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值