-a -e 文件存在
存在性类别测试
-b 存在且为块设备文件
例如[-b /etc/grub2.cfg]
-c .....字符设备
-d 目录文件
-f 普通文件
-p 命名管道文件
-h/-L 符号链接文件
-S 套接字文件
权限测试
-r -w -x 文件是否存在并且拥有。。权限
特殊权限
-g 存在且存在sgid权限
-u suid
-k sticky
大小测试
-s存在且非空(有大小)
文件是否打开
-t fd fd表示文件描述符是否已经打开且与某终端相关
-N上次读取后是否被修改过
-O 当前用户是否为文件属主
-G 当前有效用户是否为文件属主
双目测试:
FILE1 -ef FILE2 表示两个文件是否为指向同一个设备上的相同的inode
FILE1 -nt FILE2 文件1是否新于2
FILE1 -ot FILE2 1是否旧于2
组合测试条件
逻辑运算
两种方式
第一种
&&
||
!
与或非
例子 [-e file] &&[-r file] 存在且可读
第二种
EXP1 -a EXP2
EXP1 -o EXP2
! EXP
与或非
必须使用测试命令
hotsName=`hostname`
[-z "$hotsName"] || ["$hotsName"=="localhost.localdomain" ]
为空或者等于local..
1 && 2
前面满足 那么就会执行2 与命令可以看成条件命令取使用
[! -r /etc/fstab -a ! -w /etc/fstab]
[! \(-r /etc/fstab -o -w /etc/fstab\)]
这里的连接需要使用或命令,因为&&连接了两个命令,读取了第一个失败,那么就不会读第二个命令了
既不可读也不可写的测试,要注意不能在root用户下