大家好,我是“孤云幕雨”;今天给大家带来的是《Linux条件测试》
条件测试定义: 判断某需求是否满足,需要由“条件测试”机制来实现
如何编写测试表达式以实现所需的测试
(1). 执行命令,并利用命令状态返回值来判断
0:成功
1-255:失败
(2). 测试表达式
test 测试表达式
[ 测试表达式 ]
[[ 测试表达式 ]]
注意:中括号和测试表达式前后必须有空格,否则为语法错误
bash测试类型
一、数值比较测试
INTEGER 1 –gt INTEGER 2:判断整数1是否大于整数2;大于为真,否则为假
INTEGER 1 –ge INTEGER 2:判断整数1是否大于等于整数2
INTEGER 1 –lt INTEGER 2:判断整数1是否小于整数2;小于为真,否则为假
INTEGER 1 –le INTEGER 2:判断整数1是否小于等于整数2
INTEGER 1 –eq INTEGER 2:判断整数1是否等于整数2;等于为真,不等为假
INTEGER 1 –ne INTEGER 2:判断整数1是否不等于整数2;不等为真,等于为假
二、字符串测试
-z"STRING":判断指定字符串是否为空;空则为真,不空则为假
-n "STRING":判断指定字符串是否不空;不空则为真,空则为假
STRING 1 == STRING 2:判断字符串1是否和字符串2相等;相等为真,否则为假
STRING 1 !== STRING 2:判断字符串1是否和字符串2不相等;不等为真,否则为假
STRING =~ PATTERN:左侧的字符串是否能被右侧的模式所匹配(包含匹配)能匹配到则为真
STRING 1 > STRING 2:字符串是否大于
STRING 1 < STRING 2:字符串是否小于
注意:用于字符串比较时的用到的操作数都应该使用引号,且要在双中括号[[ ]]中进行
三、文件测试
(一)文件存在性测试
单目测试
-e FILENAME:文件存在性测试,存在为真,否则为假
(二)文件类型测试
-f FILENAME:判断该文件是否存在并且为普通文件
-d FILENAME:判断该文件是否存在并且为目录文件
-L FILENAME 或 -h FILENAME:判断该文件是否存在并且为软链接文件
-b FILENAME:判断该文件是否存在并且为块设备文件
-c FILENAME:判断该文件是否存在并且为字符设备文件
-p FILENAME:判断该文件是否存在并且为命名管道文件
-S FILENAME:判断该文件是否存在并且为套接字文件
(三)文件内容测试
-s FILENAME:判断该文件是否存在,是否为非空文件
(四)文件打开测试
-t FD;fd表示文件描述符是否已经打开且与某终端相关
(五)文件时间戳测试
-N FILENAME:文件自从上一次被读取之后是否被修改过
(六)文件从属关系测试
-O FILENAME:当前有效用户是否为文件属主
-G FILENAME:当前有效用户是否为文件属组
(七)双目测试
FILE1 -nt FILE2:判断FILE1是否新于FILE2
FILE1 -ot FILE2:判断FILE1是否旧于FILE2
FILE1 -ef FILE2:判断FILE1和FILE2是否指向同一个文件系统的相同inode的硬链接
(八)文件权限测试
普通权限测试
-r FILENAME:判断该文件是否存在,并且对当前用户可读
-w FILENAME:判断该文件是否存在,并且对当前用户可写
-x FILENAME:判断该文件是否存在,并且对当前用户可执行
特殊权限测试
-u FILENAME:判断该文件是否存在,并且拥有SUID权限
-g FILENAME:判断该文件是否存在,并且拥有SGID权限
-k FILENAME:判断该文件是否存在,并且拥有StickyBit权限
(九)多重(组合)条件测试
逻辑运算
数字相同则为0,数字不同则为1
与运算
真 && 真=真
真 && 假=假
假 && 真=假
假 && 假=假
或运算
真 || 真=真
真 || 假=真
假 || 真=真
假 || 假=假
非运算
! 真=假
! 假=真
逻辑与:&&
COMMAND1 && COMMAND2
EXPRESSION1 -a EXPRESSION2
逻辑或:||
COMMAND1 || COMMAND2
EXPRESSION1 –o EXPRESSION2
逻辑非:!
! COMMAND
! EXPRESSION
一行中可以执行多条语句,语句间用分号“;”分割;不管前面的语句是否正确执行,后面的语句都会执行
语句1 ; 语句2
bash自定义退出状态码
语法:exit [N]
脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
注意:shell进程遇到exit时,即会终止,因此,整个脚本执行即为结束
状态码范围:1~255之间
如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
遇到exit,bash进程会立即终止