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