Shell_test命令(条件测试)
1.语法格式:
test experssion #当test判断expression成立时,退出状态为0,否则为非0值。
或者:
[ experssion ] #[]和expression之间必须空格,否则会导致语法错误。
2.测试类型:
(1)数值测试(关系运算符):
-
-gt:是否大于
-
-ge:是否大于等于
-
-eq:是否等于
-
-ne:是否不等
-
-lt:是否小于
-
-le:是否小于等于
注意:test只能用来比较整数,小数相关的比较还得依赖bc命令。
(2)字符串测试(字符串运算符):
-
str1 = str2:是否等于 #=和==是等价的,也可写成str1 == str2
-
str1 \> str2:是否大于 #\>是>的转义字符,防止>被误认为成重定向运算符。
-
str1 \< str2:是否小于
-
str1 != str2:是否不等于
-
str1 =~ str2:左侧字符串是否能被右侧的Pattern匹配
-
-z str:字符串的长度为零则为真,非零则为假
-
-n str:字符串的长度非零为真,为零则为假
注意:大部分编程语言中都可以使用>、<、=来比较数字,但在shell中,只可以用来比较字符串,不可用来比较数字。不管是比较数字还是字符串,Shell都不支持>=和<=运算符。且在字符串测试中多使用[]来代替test。
(3)文件测试(文件测试运算符):
① 简单存在性测试:
- -a file:文件存在则为正,不存在则为假
② 存在及类型测试:
-
-b file:文件是否存在且为块设备文件
-
-c file:文件是否存在且为字符设备文件
-
-d file:文件是否存在且为目录文件
-
-f file:文件是否存在且为普通文件
-
-e file:文件是否存在
-
-h file:文件是否存在且为符号链接文件(-L也可以)
-
-p file:文件是否存在且为管道文件
-
-S file:文件是否存在且为socket套接字文件
③ 文件权限测试:
-
-r file:文件是否存在且拥有可读权限
-
-w file:文件是否存在且拥有可写权限
-
-x file:文件是否存在且拥有可执行权限
④ 文件特殊权限测试:
-
-u file:文件是否存在且拥有SUID权限
-
-g file:文件是否存在且拥有SGID权限
-
-k file:文件是否存在且拥有SBIT权限
⑤ 文件大小测试:
-
-s file:文件是否存在且为非空
⑥ 文件是否打开测试:
-
- fd : fd:表示文件爱你描述是否已经打开且与终端相关
-
-N file:文件自动上一次读取之后是否被修改过
-
-O file:当前用户是否为文件属主
-
-G file:当前用户是否为文件数组
(4)逻辑测试(逻辑运算符):
-
&&:全真则为真
-
||:有真则为真
(5)布尔测试(布尔运算符):
-
-a:或运算,有一个表达式为true则返回true
-
-o:与运算,两个表达式都为true才返回true
-
!:非运算,表达式为true则返回false,否则返回true
(6)双目测试:
-
file1 -ef file2:file1与file2是否指向同一个设上的相关inode
-
file1 -nt file2:file1是否新于file2
-
file1 -ot file2:file1是否旧于file2