条件判断式

流程控制语句

  • 条件判断式
  • 单分支 if 语句
  • 双分支 if 语句
  • 多分支 if 语句
  • case 语句
  • for 循环
  • while 循环和 until 循环

按照文件类型进行判断

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

两种判断格式

方法一

1
2
3
[root@yzbtdiy ~]# test -e /root/install.log
[root@yzbtdiy ~]# echo $? #预定义变量返回值为零,说明上一条命令正确执行,文件存在,非零则不存在
0

方法二

1
2
3
[root@yzbtdiy ~]# [ -e /root/install.log ]
[root@yzbtdiy ~]# echo $?
0

判断语句

1
2
[root@yzbtdiy ~]# [ -d /root ] && echo "yes" || echo "no" #第一个判断命令如果要正确执行,则打印“yes”,否则打印“no”
yes #/root 是一个目录,打印“yes”

按照文件权限进行判断

测试选项 作用
-r 文件 判断该文件是否存在,并且是否该文件拥有读权限(有读权限为真)
-w 文件 判断该文件是否存在,并且是否该文件拥有写权限(有写权限为真)
-x 文件 判断该文件是否存在,并且是否该文件拥有执行权限(有执行权限为真)
-u 文件 判断该文件是否存在,并且是否该文件拥有 SUID 权限(有 SUID 权限为真)
-g 文件 判断该文件是否存在,并且是否该文件拥有 SGID 权限(有 SGID 权限为真)
-k 文件 判断该文件是否存在,并且是否该文件拥有 SBit 权限(有 SBit 权限为真)

两个文件之间进行比较

测试选项 作用
文件1 -nt 文件2 判断 文件1 的修改时间是否比 文件2 的新(如果新则为真)
文件1 -ot 文件2 判断 文件1 的修改时间是否比 文件2 的旧(如果旧为真)
文件1 -ef 文件2 判断 文件1 是否和 文件2 的 lnode 号一致,可以理解为两个文件是否为同一文件。这个判断用于判断硬链接是很好的方法

两个整数之间比较

测试选项 作用
整数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(小于等于为真)

字符串的判断

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

多重条件判断

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