Linux基础学习之Shell编程——条件判断

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

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

两种判断格式:

[root@localhost ~]# test -e /root/install.log

[root@localhost ~]# [ -e /root/install.log ]    #特别注意,该方法中,必须在文字和中括号之间加空格

[root@localhost ~]# ls
abc              cde   install.log         sh        公共的  视频  文档  音乐
anaconda-ks.cfg  cdef  install.log.syslog  testfile  模板    图片  下载  桌面
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# test -e /sh/student1.txt
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -e sh/student1.txt ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# 

该测试方法用于shell编程中,供计算机系统判断

[root@localhost ~]# [ -d /root ] && echo "yes" || echo "no"

#第一个判断命令如果正确执行,则打印“yes”,否则打印 “no”

[root@localhost ~]# [ -f sh/student1.txt ] && echo "yes" || echo "no"
yes
[root@localhost ~]# 

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

测试选项作用
-r 文件判断该文件是否存在,并且是否该文件拥有读权限(有读权限为真)
-w 文件判断该文件是否存在,并且是否该文件拥有写权限(有写权限为真)
-x  文件判断该文件是否存在,并且是否该文件拥有执行权限(有执行权限为真)
-u  文件判断该文件是否存在,并且是否该文件拥有SUID权限(有SUID权限为真)
-g  文件判断该文件是否存在,并且是否该文件拥有SUID权限(有SGID权限为真)
-k  文件判断该文件是否存在,并且是否该文件拥有SUID权限(有SBit权限为真)
[root@localhost ~]# [ -w sh/
canshu1.sh         hello.sh           shili3.sh          yudingyibianliang
canshu4.sh         jiafajisuanqi.sh   student1.txt       zhengzetest
canshu6.sh         orld               student.txt        
[root@localhost ~]# [ -w sh/student1.txt ] && echo yes || echo no
yes
[root@localhost ~]# 

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

测试选项作用
文件 1 -nt  文件2判断文件1的修改时间是否比文件2的新(如果新则为真)
文件 1 -ot  文件2判断文件1的修改时间是否比文件2的旧(如果旧则为真)
文件 1 -ef  文件2

判断文件1是否和文件2的INode 号一致,可以理解为两个文件是否为同一个文件。这个判断用于判断硬链接是很好的方法

[root@localhost ~]#  ln sh/student1.txt /tmp.stu.txt

#创建个硬链接吧

[root@localhost ~]# [ sh/student1.txt -ef /tmp/stu.txt ] && echo "yes" || echo "no"

yes

#用test 测试下,果然很有用

[root@localhost ~]# ln sh/student1.txt /tmp/stu.txt
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ sh/student1.txt -ef /tmp/stu.txt ] && echo "yes" || echo "no" 
yes
[root@localhost ~]# ls -l /tmp/
总用量 136
drwxrwsrwx. 2 root      root      4096 12月  9 04:19 dtest
drwx------. 2 gdm       gdm       4096 12月 16 01:26 gconfd-gdm
drwx------. 2 root      root      4096 12月 16 01:47 gconfd-root
drwx------. 2 zhouxueli zhouxueli 4096 12月  8 23:15 gconfd-zhouxueli
drwx------. 2 root      root      4096 12月  8 23:37 keyring-5lWOtJ
drwx------. 2 root      root      4096 12月 16 01:26 keyring-6j2sYO
drwx------. 2 root      root      4096 12月  2 20:56 keyring-9AGKSr
drwx------. 2 root      root      4096 12月  9 23:05 keyring-AX5QFG
drwx------. 2 root      root      4096 11月 25 23:29 keyring-AyTbpD
drwx------. 2 zhouxueli zhouxueli 4096 12月  8 22:54 keyring-CiiiEC
drwx------. 2 root      root      4096 12月  1 23:05 keyring-ezWj0w
drwx------. 2 zhouxueli zhouxueli 4096 12月  2 20:53 keyring-QdfnOj
drwx------. 2 root      root      4096 11月 30 06:06 keyring-vlJ6ai
drwx------. 2 root      root      4096 12月  2 17:03 keyring-YABvNr
drwx------. 2 root      root      4096 12月  8 22:53 keyring-ZAwFhT
drwxr-xr-x. 2 root      root      4096 12月 10 01:39 mnc
drwx------. 2 gdm       gdm       4096 12月 16 01:26 orbit-gdm
drwx------. 2 root      root      4096 12月 16 01:27 orbit-root
drwx------. 2 zhouxueli zhouxueli 4096 12月  8 22:54 pulse-jx3uTY1OwmLg
drwx------. 2 gdm       gdm       4096 12月 16 01:27 pulse-kGStbLy1xGsu
drwx------. 2 root      root      4096 12月 16 01:27 pulse-XO0xTHUNAOA1
-rw-r--r--. 2 root      root        97 12月 17 08:52 stu.txt
drw---S---. 2 root      root      4096 12月  9 04:26 test
drwx------. 2 root      root      4096 12月  8 22:54 virtual-root.2GIIay
drwx------. 2 root      root      4096 12月  2 17:04 virtual-root.4b6x5W
drwx------. 2 root      root      4096 11月 30 06:07 virtual-root.DAJQBL
drwx------. 2 root      root      4096 12月 16 01:27 virtual-root.i7VB7K
drwx------. 2 root      root      4096 11月 25 23:29 virtual-root.iH8OBu
drwx------. 2 root      root      4096 12月  9 23:05 virtual-root.muNMyP
drwx------. 2 root      root      4096 12月  1 23:09 virtual-root.OWCe77
drwx------. 2 root      root      4096 12月 10 06:55 virtual-root.YvCVmi
drwx------. 2 zhouxueli zhouxueli 4096 12月  8 22:54 virtual-zhouxueli.kdrfZP
drwx------. 2 zhouxueli zhouxueli 4096 12月  2 20:54 virtual-zhouxueli.Xc6jGV
-rw-------. 1 root      root         7 12月  9 06:59 vitest
[root@localhost ~]# 

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 ~]# [ 23 -gt 22 ] && echo yes || echo no
yes
[root@localhost ~]# [ 23 -gt 23 ] && echo yes || echo no
no
[root@localhost ~]# [ 23 -ge 23 ] && echo yes || echo no
yes
[root@localhost ~]# [ 23 -ge 40 ] && echo yes || echo no
no
[root@localhost ~]# 

5、字符串的判断

测试选项作用
-z 字符串判断字符串是否为空(为空返回真)
-n 字符串判断字符串是否为非空(非空返回真)
字符串1==字串2判断字符串1是否和字符串2相等(相等返回真)
字符串1!= 字串2判断字符串1是否和字符串2不相等(不相等返回真)

[root@localhost ~]# name=sc

#给name变量赋值

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

no

#判断name变量是否为空,因为不为空,所以返回no

[root@localhost ~]# name=sc
[root@localhost ~]# [ -z "$name" ] && echo yes || echo no
no
[root@localhost ~]# [ -z "$namew" ] && echo yes || echo no
yes
[root@localhost ~]# [ -n "$name" ] && echo yes || echo no
yes

[root@localhost ~]#aa=11

[root@localhost ~]# bb=22

#给变量aa和bb变量赋值

[root@localhost ~]# [ "$aa" == "$bb" ] && echo yes || echo no    

no

#判断两个变量的值是否相等,明显不相等,所以返回no

# 特别注意 == 号前后要有空格,亲测必须有空格!!!!

[root@localhost ~]# aa=abc
[root@localhost ~]# bb=abc
[root@localhost ~]# [ "$aa"=="bb" ] && echo yes || echo no
yes
[root@localhost ~]# [ "$aa"=="$bb" ] && echo yes || echo no
yes
[root@localhost ~]# [ "$aa"=="juijjk" ] && echo yes || echo no
yes
[root@localhost ~]# [ "$aa" == "juijjk" ] && echo yes || echo no
no
[root@localhost ~]# [ "$aa" == "$bb" ] && echo yes || echo no
yes
[root@localhost ~]# 
# 再次提醒,如上,发现 ==  号前后必须有空格

 

6、多重条件判断

测试选项作用
判断1 -a 判断2逻辑与,判断1和判断2都成立,最终的结果才为真
判断1 -a 判断2逻辑或,判断1和判断2有一个成立,最终的结果就为真
!判断逻辑非,使原始的判断式取反

示例:

[root@localhost ~]# [ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"
no
[root@localhost ~]# 
#判断变量aa是否有值,同时判断变量aa的值是否大于23
#因为变量aa的值不大于23,所以虽然第一个判断值为真,返回的结果也为假

[root@localhost ~]# aa=24
[root@localhost ~]# [ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"
yes
[root@localhost ~]# 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值