大家好,我是“孤云幕雨”;今天给大家带来的是《Linux条件测试》
条件测试定义: 判断某需求是否满足,需要由“条件测试”机制来实现
如何编写测试表达式以实现所需的测试
v 执行命令,并利用命令状态返回值来判断
Ü 0:成功
Ü 1-255:失败
v 测试表达式
Ü 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:字符串是否小于
注意:用于字符串比较时的用到的操作数都应该使用引号,且要在双中括号[[ ]]中进行
三、文件测试
(一)文件存在性测试
v 单目测试
Ü -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权限
(九)多重(组合)条件测试
v 逻辑与:&&
Ü COMMAND1 && COMMAND2
Ü EXPRESSION1 -a EXPRESSION2
v 逻辑或:||
Ü COMMAND1 || COMMAND2
Ü EXPRESSION1 –o EXPRESSION2
v 逻辑非:!
Ü ! COMMAND
Ü ! EXPRESSION
逻辑运算
数字相同则为0,数字不同则为1
与运算
v 真 && 真=真
v 真 && 假=假
v 假 && 真=假
v 假 && 假=假
或运算
v 真 || 真=真
v 真 || 假=真
v 假 || 真=真
v 假 || 假=假
非运算
v ! 真=假
v ! 假=真
一行中可以执行多条语句,语句间用分号“;”分割;不管前面的语句是否正确执行,后面的语句都会执行
v 语句1 ; 语句2
bash自定义退出状态码
语法:exit [N]
脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
注意:shell进程遇到exit时,即会终止,因此,整个脚本执行即为结束
v 状态码范围:1~255之间
v 如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
v 遇到exit,bash进程会立即终止