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 ~]#