7、条件判断
条件判断语法格式
格式1:test 条件表达式
格式2:[ 条件表达式 ] #注意空格
格式3:[[条件表达式]] #支持正则表达式
条件判断的相关参数
问:你要判断什么?
答:我要判断文件类型,判断文件新旧,判断文件是否存在,判断字符串是否相等。。。。。
判断文件类型
红色字为重点,最常用
判断参数 | 含义 |
---|---|
-e | 判断文件是否存在(任何类型文件) |
-f | 判断文件是否存在,并且是一个普通文件 |
-d | 判断文件是否存在,并且是一个目录 |
-L | 判断文件是否存在,并且是一个软连接文件 |
-b | 判断文件是否存在,并且是一个块设备文件 |
-S | 判断文件是否存在,并且是一个套接字文件 |
-c | 判断文件是否存在,并且是一个字符设备文件 |
-p | 判断文件是否存在,并且是一个命名管道文件 |
-s | 判断文件是否存在,并且是一个非空文件(有内容) |
举例说明:判断文件是否存在?(重点)
[root@localhost ~]# touch pokes.txt
[root@localhost ~]# test -e pokes.txt
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -e pokessss.txt
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -e pokes.txt ] #中括号也是可以的,脚本中经常是使用中括号,记得括号两端的空格不能少
[root@localhost ~]# echo $?
0
判断文件权限
红色字为重点,最常用
测试选项 | 作用 |
---|---|
-r 文件 | 判断该文件是否存在,并且是否该文件拥有读的权限,有读权限为真 |
-w 文件 | 判断该文件是否存在,并且是否该文件拥有写的权限,有写权限为真 |
-x 文件 | 判断该文件是否存在,并且是否该文件拥有执行权限,有执行权限为真 |
-u 文件 | 判断该文件是否存在,并且是否该文件拥有SUID权限,有SUID权限为真 |
-g 文件 | 判断该文件是否存在,并且是否该文件拥有SGID权限,有SGID权限为真 |
-k 文件 | 判断该文件是否存在,并且是否该文件拥有SBit权限,有SBit权限为真 |
举例说明:判断文件否有写和执行的权限?
[root@localhost ~]# ll
总用量 4
-rw-------. 1 root root 1241 9月 20 2020 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 1月 28 10:51 pokes.txt
[root@localhost ~]# [ -w pokes.txt ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -x pokes.txt ]
[root@localhost ~]# echo $?
1
[root@localhost ~]#
两个文件之间比较(新旧)
选项 | 作用 |
---|---|
文件1 -nt 文件2 | 判断文件1的修改时间是否比文件2的新,如果新则为真 |
文件1 -ot 文件2 | 判断文件1的修改时间是否比文件2的旧,如果旧则为真 |
文件1 -ef 文件2 | 判断文件1和文件2的Inode号是否一致,如果一致则为真。可以理解为两个文件是否为同一个文件,这个判断用于判断硬链接是很好的方法。 |
两个整数之间的比较
红色字为重点,最常用
测试选项 | 作用 |
---|---|
整数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 -eq 24 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ 24 -eq 24 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]#
字符串的判断
选项 | 作用 |
---|---|
-z 字符串 | 判断字符串是否为空,为空返回为真 |
-n 字符串 | 判断字符串是否非空,非空返回为真 |
字符串1==字符串2 (两个等号) | 判断字符串是否相等,相等返回为真 |
字符串1!==字符串2 (两个等号) | 判断字符串是否不相等,不相等返回为真 |
举例说明:判断两个字符串是否相等?(重点)
[root@localhost ~]# [ "aa" == "aa" ] #注意字符串,等号两端都有空格
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ "aa" == "bb" ]
[root@localhost ~]# echo $?
1
多重条件判断
选项 | 作用 |
---|---|
判断1 -a 判断2 | 逻辑与,判断1和判断2都成立,最终的结果才为真 |
判断1 -o 判断2 | 逻辑或,判断1和判断2有一个成立,最终的结果就为真 |
!判断 | 逻辑非,使原始的判断式取反 |
举例说明:判断11是否存在,再判断11是否大于23?
[root@localhost ~]# [ -n 11 -a 11 -gt 23 ] #判断11是否存在,再判断11是否大于23,整数肯定是存在的。
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -n 11 -a 11 -gt 9 ]
[root@localhost ~]# echo $?
0