您的位置:首页 > 运维架构 > Shell

bash编程之:条件测试

2015-09-15 04:12 351 查看
日期: 2015年09月13日

<<========================================【条件测试】========================================>>
条件测试
bash的条件测试主要有以下3类:整数测试:比较两个整数谁大谁小,是否相等;字符测试:比较两个字符串是否相等;文件测试:测试某个文件是否具有读权限、写权限、执行权限等;
(1) 根据运行的命令的状态结果判断(2) 在bash中进行条件测试的方式通常有三种:test EXPRESSION[ EXPRESSION ] ==>两边必须要有空格,否则语法错误[[ EXPRESSION ]] ==>两边必须要有空格,否则语法错误
其中"["是启动测试命令,但要求在expression后要有一个"]"与其配对。使用该命令要特别注意"["后和"]"前的空格必不可少。
字符串比较时建议字符串变量要使用双引号,即使变量为空,也要使用双引号。
所有的测试条件都通过布尔值:(真、假) 来判定测试结果真,假 (对于命令状态返回值来讲,0是真,其他数值都是假)
通过 echo $? 可获得上一条命令的执行状态;状态用数字来表示:0-255;0: 成功1-255: 失败 (1、2、127 是系统预留的)

整数测试: A=100 B=101[[ "$A" -gt "$B" ]]: 测试A的变量赋值是否大于B的变量赋值,是则为"真",否则为"假"[[ "$A" -ge "$B" ]]: 测试A的变量赋值是否大于等于B的变量赋值,是则为"真",否则为"假"[[ "$A" -lt "$B" ]]: 测试A的变量赋值是否小于B的变量赋值,是则为"真",否则为"假"[[ "$A" -le "$B" ]]: 测试A的变量赋值是否小于等于B的变量赋值,是则为"真",否则为"假"[[ "$A" -eq "$B" ]]: 测试A的变量赋值是否等于B的变量赋值,是则为"真",否则为"假"[[ "$A" -ne "$B" ]]: 测试A的变量赋值是否不等于B的变量赋值,是则为"真",否则为"假"
示例:


字符串测试:ASCII数值越大,字符比较时其值越大[[ ABC > ABC ]]: 左侧字符是否大于右侧字符[[ ABC < ABC ]]: 左侧字符是否小于右侧字符[[ ABC == ABC ]]: 左侧字符是否等于右侧字符[[ ABC != ABC ]]: 左侧字符是否不等于右侧字符[[ ABC =~ C ]]: 左侧字符串能否被右侧模式所匹配
示例:


单目测试:只测试一个变量[ -z "$name" ]: 测试变量赋值是否为空,空则为"真",否则为"假"[ -n "$name" ]: 测试变量赋值是否不空,不空则"真",空则为"假"

示例:


文件测试:测试文件的存在性以及属性:-a /path/to/file:测试文件是否存在,存在为"真",否则为"假"-e /path/to/file:测试文件是否存在,存在为"真",否则为"假"-f /path/to/file:测试文件是否存在且为普通文件-d /path/to/file:测试文件是否存在且为目录文件-h /path/to/file:测试文件是否存在且为符号链接文件-L /path/to/file:测试文件是否存在且为符号链接文件-b /path/to/file:测试文件是否存在且为块设备文件-c /path/to/file:测试文件是否存在且为字符设备文件-S /path/to/file:测试文件是否存在且为套接字文件-p /path/to/file:测试文件是否存在且为管道文件-s /path/to/file:测试文件是否存在并且不空 -r /path/to/file:当前用户对文件是否拥有读权限-w /path/to/file:当前用户对文件是否拥有写权限-x /path/to/file:当前用户对文件是否拥有执行权限 -u /path/to/file:文件是否拥有SUID权限-g /path/to/file:文件是否拥有SGID权限-K /path/to/file:文件是否拥有sticky权限 -O /path/to/file:当前用户是否为指定文件的属主-G /path/to/file:当前用户是否为指定文件的属组 双目操作符:[ "$file1" -nt "$file2" ]:
file1的最近一次修改时间戳是否晚于file2[ "$file1" -ot "$file2" ]:
file1的最近一次修改时间戳是否早于file2[ "$file1" -ef "$file2" ]:
file1与file2是否指向了同一个inode,测试二者是否为硬链接

示例:



总结: ★关于条件测试,单中括号 [ ] 与双中括号 [[ ]] 的区别: 通常,在比较变量赋值时建议使用 [ ],比较变量的赋值时,变量务必加双引号,在比较纯字符串时建议使用[[ ]],字符串比较,比较符号两端最好都有空格 在[[]]中可以使用通配符进行匹配。&& || > < =~等符号可以应用与[[]]中,但不能用于[]中 字符串测试:=比较两个字符串是否相同,与==等价,比如:if [ "$a" = "$b"],变量要加双引号若字符串中间有空格或*号等特殊符号时就容易出错,因此推荐使用格式:[ "${a}"="${b}" ] 常用字符串测试操作符:-z "字符串" 若串长度为0则真,不为0则假,如: [ -z "$abc" ]-n "字符串" 若串长度不为0则真,为0则为假如: [ -n "$abc" ][[ "串1"="串2" ]] 若串1等于串2则真,可以使用==代替=[[ "串1"!="串2" ]] 若串1不等于串2则真, 但不能用!==代替!=

<<====================================【组合条件测试】====================================>>组合条件测试条件间逻辑运算:与:多个条件要同时满足或:多个条件满足其一即可非:对指定的条件取反 表达式组合:与: [[ CONDITION1 -a CONDITION2 ]]或: [[ CONDITION1 -o CONDITION2 ]]非: [ ! CONDITION ] 示例:



命令组合:与: COMMAND1 && COMMAND2 <-- [ EXPR1 ] && [ EXPR2 ]或: COMMAND1 || COMMAND2非: ! COMMAND 逻辑运算:与运算:(假和任何数相与都得假)真 && 真 = 真真 && 假 = 假假 && 真 = 假假 && 假 = 假 或运算:(真和任何数相或都得真)真 || 真 = 真真 || 假 = 真假 || 真 = 真假 || 假 = 假 非运算:(取反面)! 真 = 假! 假 = 真 短路操作符:对条件本身做逻辑运算与:条件1 && 条件2条件1为假,则最终结果一定为假,因此,条件2将不执行;条件1为真,则最终结果取决于后面条件,因此,条件2必须执行; 或:条件1 || 条件2条件1为真,则最终结果一定为真,因此,条件2将不再执行;条件1为假,则最终结果取决于后面条件,因此,条件2必须执行; 非: ! 条件 示例:id一个用户名,如果执行成功则显示该用户存在,如果id命令没有执行成功,则显示该用户不存在。id $userName &> /dev/null&& echo "$userNmae exist." || echo "$userName notexist"

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: