这里我先对ab是否相等进行判断,之后查看结果是假,也就是a不是b。之后对其进行大小判断,然后报错,先为ab加""结果报错,之后又加了[]才未报错。这里我们可以看到在字符串测试中使用[[ ]]方式进行会比较靠谱,但也不一定。用[]还是[[ ]]就是在这种测试中摸索出来的。
下面再对字符是否为空举一个例子
[root@localhost test]# name1=
[root@localhost test]# [ -z $name1 ]
[root@localhost test]# echo $?
[root@localhost test]# [ -n $name1 ]
[root@localhost test]# echo $?
怎么会出现这种情况?字符测试为空竟然不灵!别慌,上面我们曾有经验,字符测试如果单中括号失败那就试试双中括号
[root@localhost test]# [[ -z $name1 ]]
[root@localhost test]# echo $?
[root@localhost test]# [[ -n $name1 ]]
[root@localhost test]# echo $?
结果终于如愿,上面的两个例子告诉我们,当测试结果并不是对时,调整下中括号往往有奇效。
………………………………………………………………………………………………………………………
文件测试:
1、存在性测试
-a FILE (少用)
-e FILE 文件存在性测试,存在为真,否则为假
[root@localhost test]# [ -e /etc/fstab ]
[root@localhost test]# echo $?
0
[root@localhost test]# [[ -e /etc/ftab ]]
[root@localhost test]# echo $?
2、存在性及类别测试
-b FILE:是否存在且为块设备文件,存在为真否则为假
-c FILE:是否存在且为字符设备文件,存在为真,否则为假
-f FILE:是否存在且为普通文件,存在为真,否则为假
-d FILE:是否存在且为目录文件,存在为真,否则为假
-h FILE 或 -L FILE :是否存在且为链接文件,存在为真,否则为假
-p FILE:是否存在且为命名管道文件,存在为真,否则为假
-S FILE:是否存在且为套接字文件,存在为真,否则为假
[root@localhost test]# [ -f /test/if1 ]
[root@localhost test]# echo $?
[root@localhost test]# [ -f /test/ ]
[root@localhost test]# echo $?
3、文件权限测试
-r FILE:是否存在且对当前用户可读,存在为真,否则为假
-w FILE:是否存在且对当前用户可写,存在为真,否则为假
-x FILE:是否存在且对当前用户可执行,存在为真,否则为假
[root@localhost test]# echo $USER
root
[root@localhost test]# [ -r /test/ ]
[root@localhost test]# echo $?
4、文件特殊权限测试
-g FILE:是否存在且拥有sgid,存在为真,否则为假
-u FILE:是否存在且拥有suid,存在为真,否则为假
-k FILE:是否存在且拥有sticky,存在为真,否则为假
[root@localhost test]# [ -g /test/if1 ]
[root@localhost test]# echo $?
[root@localhost test]# ll /test/if1
-rwxr-xr-x. 1 root root 149 8月 15 10:34 /test/if1
5、文件大小测试
-s FILE:是否存在且非空,存在为真,否则为假
[root@localhost test]# [ -s /test/file1 ]
[root@localhost test]# echo $?
[root@localhost test]# echo > file1
[root@localhost test]# [ -s /test/file1 ]
[root@localhost test]# echo $?
0
6、文件时间戳测试
-N FILE:文件自上一次被读取之后是否被修改过,被修改过为真,否则为假
选取刚刚被修改过得file1测试
[root@localhost test]# [ -N /test/file1 ]
[root@localhost test]# echo $?
0
7、文件从属关系测试
-O FILE:当前用户是否为文件的属主,是为真,否为假
-G FILE:当前用户是否属于文件的属组,是为真,否为假
[root@localhost test]# [ -O /test/if1 ]
[root@localhost test]# echo $?
0
[root@localhost test]# ll /test/if1
-rwxr-xr-x. 1 root root 149 8月 15 10:34 /test/if1
8、双目测试
FILE1 -ef FILE2 :FILE1与FILE2是否指向同一个文件系统的相同inode的硬链接,是则为真,否为假
FILE1 -nt FILE2 :FILE1的mtime是否新于FILE2,是为真,否为假
FILE1 -ot FILE2 :FILE1的mtime是否旧于FILE2,是为真,否为假
[root@localhost test]# [ /test/if1 -nt /test/file1 ]
[root@localhost test]# echo $?
因为file1刚刚被修改过,所以它比if1文件的mtine要新,因为使用-nt故测试结果为假
组合测试
第一种方式:
与 COMMAND1 && COMMAND2 第一条命令为假后不再执行第二条命令,为真方执行。
或 COMMAND1 || COMMAND2 第一条命令为真后不再执行第二条命令,为假方执行。
非 ! COMMAND 对命令结果的真假取反
第二种方式:
EXPRESSION -a EXPRESSION 第一条命令为假后不再执行第二条命令,为真方执行。
EXPRESSION -o EXPRESSION 第一条命令为真后不再执行第二条命令,为假方执行。
! EXPRESSION 对命令结果的真假取反