条件测试
判断某需求是否满足,需要由测试机制来实现。
根据命令的执行状态结果,表达不同的测试条件
1、根据id命令的执行状态结果,判断用户是否存在
[[email protected] ~]# id root uid=0(root) gid=0(root) groups=0(root) [[email protected] ~]# echo $? 0 [[email protected] ~]# id help id: help: no such user [[email protected] ~]# echo $? 1
2、根据在/etc/passwd文件中找到root开头的词的执行状态结果,判断用户是否存在
[[email protected] ~]# grep -q ‘^root\b‘ /etc/passwd [[email protected] ~]# echo $? 0 [[email protected] ~]# grep -q ‘^help\b‘ /etc/passwd [[email protected] ~]# echo $? 1
使用测试,在测试时,要使用特殊的测试符
1)test 测试表达式
[[email protected] ~]# test 1 > 3 [[email protected] ~]# echo $? 0 [[email protected] ~]# test 1 -gt 3 # 在数值测试时,用-gt表示 > 符号 [[email protected] ~]# echo $? 1
2)[ 测试表达式 ]
[[email protected] ~]# [1 -lt 3] # 测试表达示与中括号必须存在空格,否则就会报错。 -bash: [1: command not found [[email protected] ~]# [ 1 -lt 3 ] # 在数值测试时,用-lt表示 < 符号 [[email protected] ~]# echo $? 0
3) [[ 测试表达式 ]]
[[email protected] ~]# [[1 -lt 3]] -bash: [[1: command not found [[email protected] ~]# [[ 1 -eq 3 ]] # 在数值测试时,用-eq 表示 = 符号 [[email protected] ~]# echo $? 1
测试符分类
数值测试
-eq 左侧是否等于右侧
-ne 是不等于
-gt 是否大于
-ge 是否大于等于
-lt 是否小于
-le 是否小于等于
1)A -eq B, 测试A所表示的数值是否等于B所表示的数值。等于为真
##测试方法一 # A=1 # B=10 # test $B -eq $A # 测试变量B内存空间中存储的数据和变量A内存空间中存储的数据是否相等 # echo $? 1 ##测试方法二 # [ $B -eq $A ] # echo $? 1 ##测试方法三 # [[ $B -eq $A ]] # echo $? 1
2)A -ne B, 测试A所表示的数值是否不等于B所表示的数值。不等于为真
##测试方法一 # test $B -ne $A # 测试变量B内存空间中存储的数据和变量A内存空间中存储的数据是否不相等 # echo $? 0 ##测试方法二 # [ $B -ne $A ] # echo $? 0 ##测试方法三 # [[ $B -ne $A ]] # echo $? 0
3) A -gt B , 测试A所表示的数值是否大于B所表示的数值。大于为真
##测试方法一 # test 10 -gt 3 # 测试10是否大于3 # echo $? 0 ##测试方法二 # [ 10 -gt 3 ] # echo $? 0 ##测试方法三 # [[ 10 -gt 3 ]] # echo $? 0
3) A -ge B , 测试A所表示的数值是否大于等于B所表示的数值。大于等于为真
##测试方法一 # test 10 -ge 3 # 测试10是否大于等于3 # echo $? 0 ##测试方法二 # [ 10 -ge 3 ] # echo $? 0 ##测试方法三 # [[ 10 -ge 3 ]] # echo $? 0
4)A -lt B , 测试A所表示的数值是否小于B所表示的数值。小于为真
##测试方法一 # let 1 -lt 3 # 测试 1 是否小于 3 # echo $? 0 ##测试方法二 # [ 1 -lt 3 ] # echo $? 0 ##测试方法三 # [[ 1 -lt 3 ]] # echo $? 0
5)A -le B , 测试A所表示的数值是否小于等于B所表示的数值。小于等于为真
##测试方法一 # let 1 -le 3 # 测试 1 是否小于 3 # echo $? 0 ##测试方法二 # [ 1 -le 3 ] # echo $? 0 ##测试方法三 # [[ 1 -le 3 ]] # echo $? 0
字符测试 (所有的操作数,都应该使用引用)
== 等值测试
> 是否大于, ASCII码的比较
< 是否小于
!= 是否不等于
A =~ PATTERN 左侧字符串是否能够被右侧的(正则表达式)PATTERN所匹配到。一般用于 [[ ]] 中,PATTERN不能加引号
-z "STRING" 测试字串是否为空,空为真
-n "STRING" 是否不空
1) A == B ,A所表示的字符和B所表示的字符是否相等
##测试方法一 # test "obama" == "obama" # 测试左侧字符串,是否与右侧字符串相等 # echo $? 0 # test "obama" == "Obama" # 可见字符串,必须完成相等 # echo $? 1 # A=obama # B=jerry # test "$A" == "$B" # 测试A变量内存空间存储的数据(字符型或数值型)是否与B变量中存储的数据相等 # echo $? 1 ##测试方法二 # [ "obama" == "obama" ] # echo $? 0 # A=obama # B=jerry # [ "$A" == "$B" ] # echo $? 1 ##测试方法三 # [[ "obama" == "obama" ]] # echo $? 0 # [[ "$A" == "$B" ]] # echo $? 1
2) A > B ,A所表示的字符是否大于B所表示的字符
3) A < B ,A所表示的字符是否小于B所表示的字符
4) A != B ,A所表示的字符和B所表示的字符是否不相等
##测试方法一 # test "obama" != "obama" # 测试左侧字符串,是否与右侧字符串不相等 # echo $? 1 # test "$B" != "$A" # echo $? 0 ##测试方法二 # [ "obama" != "obama" ] # echo $? 1 # [ "$B" != "$A" ] # echo $? 0 ##测试方法三 # [[ "obama" != "obama" ]] # echo $? 1 # A=obama # B=jerry # [[ "$A" != "$B" ]] # echo $? 0
5) A =~ B ,A所表示的字符能否被B所表示的(正则表达式)模式所匹配。
# test "obama" =~ "^o.*" -bash: test: =~: binary operator expected # test "obama" =~ ^o.* -bash: test: =~: binary operator expected # [ "obama" =~ "^o.*" ] -bash: [: =~: binary operator expected # [ "obama" =~ ^o.* ] -bash: [: =~: binary operator expected # [[ "obama" =~ "^o.*" ]] # echo $? 1 # [[ "obama" =~ ^o.* ]] #模式不能加引号 # echo $? 0
6)-z "B", 测试B所表示的字符串是否为空,空为真
##测试方法一 # test -z "obama" # echo $? 1 A= # test -z "$A" # A变量为空时,测试其结果 # echo $? 0 A=jerry # test -z "$A" # A变量不空时,测试其结果 # echo $? 1 ##测试方法二 # [ -z "how are you?" ] # echo $? 1 A= # [ -z "$A" ] # echo $? 0 ##测试方法三 # [[ -z "how are you?" ]] # 测试字串是否为空 # echo $? 1 A= # [[ -z "$A" ]] # 测试变量中存储的字串,是否为空 # echo $? 0
7) -n "B", 测试B所表示的字符串是否为不空,不空为真
##测试方法一 # test -n "obama" # echo $? 0 A= # test -n "$A" # A变量为空时,测试其结果 # echo $? 1 A=jerry # test -n "$A" # A变量不空时,测试其结果 # echo $? 0 ##测试方法二 # [ -n "how are you?" ] # echo $? 0 A= # [ -n "$A" ] # echo $? 1 ##测试方法三 # [[ -n "how are you?" ]] # 测试字串是否为空 # echo $? 1 A= # [[ -n "$A" ]] # 测试变量中存储的字串,是否为空 # echo $? 1
文件测试
2、bash中自定义退出状态码
exit [#] 在bash脚本中,一旦遇到exit命令就会终止脚本,退出状态码为exit后的数值。
1、exit存在时
# nano helo.sh #!/bin/bash printf "hello everyone\n" exit 1 ## 判断脚本执行的状态结果 # bash helo.sh hello everyone # echo $? 1
2、exit不存在时
# nano helo.sh #!/bin/bash printf "hello everyone\n" ## 判断脚本执行的状态结果 # bash helo.sh #!/bin/bash ls /varr printf "hello everyone\n" # echo $? ##返回值为最后一个命令的执行状态结果 0
谢烟客---------Linux之Bash基础特性条件测试&&自定义退出状态码(6)