bash常用条件测试
1.整数测试
-gt 是否大于 -le 是否小于等于 -ne 是否不等于 -eq 是否等于 -ge 是否大于等于 -lt 是否小于 [[email protected] ~]# in=2 [[email protected] ~]# en=3 [[email protected] ~]# [ $in -eq $en ] [[email protected] ~]# echo $? 1 #$?是用来查看上一条命令执行状态;0位true 1或1以上都是为false [[email protected] ~]# [ $in -lt $en ] [[email protected] ~]# echo $? 0
2.文件测试
1.文件存在及类别测试
-a file 测试文件是否存在 -e file 测试文件是否存在 -s file 测试文件是否为非空 -h file 测试文件是否为链接文件 -p file 测试文件是否为命名管道文件 -c field 测试文件是否为字符设备文件 -f file 测试文件是否为普通文件 -d file 测试文件是否为目录 -S file 测试文件是否为套接字文件 [[email protected] ~]# [ ! -e 2.sh ] [[email protected] ~]# echo $? 1 #测试 2.sh文件是否不存在(!取反) [[email protected] ~]# [ ! -e ll.sh ] [[email protected] ~]# echo $? 0 #测试文件 ll.sh是否不存在 [[email protected] ~]# ll 2.sh -rw-r--r--. 1 root root 101 Aug 11 22:50 2.sh [[email protected] ~]# ll ll.sh ls: cannot access ll.sh: No such file or directory [[email protected] ~]# #查看文件的的存在状态已证明上面的测试条件
2.文件权限测试
-r file 测试当前用户对指定文件是否有读权限 -w file 测试当前用户对指定文件是否有写权限 -x file 测试当前用户对指定文件是否有执行权限 -O file 当前有效用户是否为文件属主 -G file 当前有效用户是否为文件属组 [[email protected] ~]# [ -r 2.sh ] [[email protected] ~]# echo $? 0 [[email protected] ~]# ll 2.sh -rw-r--r--. 1 root root 101 Aug 11 22:50 2.sh #测试当前用户对2.sh是否有读权限 -g file 是否存在拥有sgid权限 -u file 是否存在拥有suid权限 -k file 是否存在拥有sticky权限
3.文件是否打开测试
-t fd fd表示文件描述是否已经打开且与某终端相关 -N file 文件自上一次读取后是否被修改过
4.双目测试
file1 -ef file2 两个文件的inode是否指向同一个设备 file1 -nt file2 file1是否新于file2 file1 -ot file2 file是否旧于file2 [[email protected] testdir]# [ q -nt createuser.sh ]&&echo "ok" #测试文件q 是否新于createuser.sh 无反馈值 false [[email protected] testdir]# [ q -ot createuser.sh ]&&echo "ok" ok #测试文件q文件是否旧于createuser.sh 反馈为ok true [[email protected] testdir]# ll q createuser.sh -rw-r--r--. 1 root root 0 Aug 15 20:10 createuser.sh -rw-r--r--. 1 root root 21 Aug 15 16:11 q
5.组合测试条件
command1 && command2 #并且 ,既满足前面的测试条件又满足后面的测试条件 [[email protected] bin]# [ -e cat ]&&[ -r cat ]&& echo "yes" yes command1||command2 #或者 ,满足其中一个测试条件 [[email protected] bin]# [ -e cat ]||[ -r cat ]&& echo "yes" yes
还可以使用参数来用来组合测试
-a 并且 -o 或者 [[email protected] testdir]# ll q -rw-r--r--. 1 root root 21 Aug 15 16:11 q #以上为文件q相关属性信息 [[email protected] testdir]# [ -e q -a -x q ] [[email protected] testdir]# echo $? 1 #测试文件q是否存在并且当前用户拥有执行权限 [[email protected] testdir]# [ -e q -o -x q ] [[email protected] testdir]# echo $? 0 #测试文件q是否存在或者是否有执行权限,因为满足存在所有反馈为0true [[email protected] testdir]# [ -e q -a -r q ] [[email protected] testdir]# echo $? 0 #测试文件是否存在并且有读权限,因为两个测试条件都满足,所以反馈为0 true
3.字符串测试
==:是否等于; >: ascii码是否大于ascii码 <: 是否小于 !=: 是否不等于 =~: 左侧字符串是否能够被右侧的PATTERN所匹配 注意: 此表达式一般用于[[ ]]中; -z "STRING":字符串是否为空,空为真,不空为假 -n "STRING":字符串是否不空,不空为真,空为假 #注意:用于字符串比较时的用到的操作数都应该使用引号 [[email protected] testdir]# a1=abc [[email protected] testdir]# a2=cba [[email protected] testdir]# [ "$a1" == "$a2" ]&&echo "ok" [[email protected] testdir]# a2=abc [[email protected] testdir]# [ "$a1" == "$a2" ]&&echo "ok" ok
时间: 2024-12-06 10:52:04