shell的條件測試,變量測試,表達式中的0和1,數值判斷,字符串判斷
條件測試
條件測試:判斷某需求是否滿足。若真,則狀態(tài)碼變量0; 返回若假,則狀態(tài)碼變量,返回1
條件測試命令
test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]]
注意:EXPRESSION前后必須有空白字符
變量測試
-v VAR 或者 [ -v VAR] 變量VAR是否設置
注: 變量的條件測試其實就是判斷變量是否定義
[root@zaishu ~]# unset a //重置變量,表示變量沒有被定義 [root@zaishu ~]# test -v a [root@zaishu ~]# echo $? 1
[root@zaishu ~]# a=1 //變量已定義 [root@zaishu ~]# test -v a [root@zaishu ~]# echo $? //所以判斷為真 0
[root@zaishu ~]# a='' [root@zaishu ~]# test -v a [root@zaishu ~]# echo $? 0
[root@zaishu ~]# a="" [root@zaishu ~]# test -v a [root@zaishu ~]# echo $? 0
[root@zaishu ~]# [ -v b ] [root@zaishu ~]# echo $? 1
[root@zaishu ~]# [ -v a ] [root@zaishu ~]# echo $? 0
表達式中的0或1
表達式中的數字0或1,并不代表真假,每個表達式執(zhí)行完,退出的時候,都會返回一個退出狀態(tài)碼。if語句根據 [ ] 表達式執(zhí)行的退出狀態(tài)碼進行判斷,在所有的退出狀態(tài)碼中,0表示執(zhí)行成功,其他退出狀態(tài)碼都為假。這是與C語言不同的。
[root@zaishu sh]# cat tru.sh #!/bin/bash if [ 1 ]; //這其實返回值是為0,為真 then echo 'ok'; fi [root@zaishu sh]# ./tru.sh [root@zaishu sh]# ok
[root@zaishu sh]# cat tru.sh #!/bin/bash if [ 0 ]; //這其實返回值是為0,為真 then echo 'ok'; fi [root@zaishu sh]# ./tru.sh [root@zaishu sh]# ok
數值測試
-gt 是否大于 -ge 是否大于等于 -eq 是否等于 -ne 是否不等于 -lt 是否小于 -le 是否小于等于
[root@zaishu sh]# a=1 [root@zaishu sh]# b=2 [root@zaishu sh]# [ $a -lt $b ] [root@zaishu sh]# echo $? 0 [root@zaishu sh]# [ $a -gt $b ] [root@zaishu sh]# echo $? 1
[root@zaishu sh]# cat num.sh #!/bin/bash a=30 b=20 if [ $a != $b ] then echo "$a !=$b:a != b" else echo "$a !=$b:a = b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a 小于 100 且 $b 大于 15 : 返回 true" else echo "$a 小于 100 且 $b 大于 15 : 返回 false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a 小于 100 或 $b 大于 100 : 返回 true" else echo "$a 小于 100 或 $b 大于 100 : 返回 false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a 小于 5 或 $b 大于 100 : 返回 true" else echo "$a 小于 5 或 $b 大于 100 : 返回 false" fi
[root@zaishu sh]# ./num.sh 30 !=20:a != b 30 小于 100 且 20 大于 15 : 返回 true 30 小于 100 或 20 大于 100 : 返回 true 30 小于 5 或 20 大于 100 : 返回 false
字符串測試
- 常見比較符
-z "STRING" 字符串是否為空,空為真,不空為假 -n "STRING" 字符串是否不空,不空為真,空為假 = 是否等于 != 是否不等于 > ascii碼是否大于ascii碼 < 是否小于 == 左側字符串是否和右側的PATTERN相同 注意:此表達式用于[[ ]]中,PATTERN為通配符 =~ 左側字符串是否能夠被右側的PATTERN所匹配 注意: 此表達式用于[[ ]]中;擴展的正則表達式
單引號和雙引號的區(qū)別
對類型來說是無關的。
單引號不對相關量進行替換,如不對$符號解釋成變量引用,從而用對應變量的值替代,雙引號則會進行替代。字符匹配示例
[root@zaishu sh]# unset str [root@zaishu sh]# [ -z "str" ] //為空,所以表達式返回值為真 [root@zaishu sh]# echo $? 0 [root@zaishu sh]# unset str [root@zaishu sh]# [ -z "str" ] [root@zaishu sh]# echo $? 1 [root@zaishu sh]# [ -z "$str" ] [root@zaishu sh]# echo $? 0 [root@zaishu sh]# str="" [root@zaishu sh]# [ -z "$str" ] [root@zaishu sh]# echo $? 0 [root@zaishu sh]# str=" " [root@zaishu sh]# [ -z "$str" ] [root@zaishu sh]# echo $? 1 [root@zaishu sh]# [ -n "$str" ] [root@zaishu sh]# echo $? 0 [root@zaishu sh]# str=zaishu [root@zaishu sh]# [ "$str" ] [root@zaishu sh]# echo $? 0 [root@zaishu sh]# str1=zaishu [root@zaishu sh]# str2=shuge [root@zaishu sh]# [ "$str1" = "str2" ] [root@zaishu sh]# echo $? 1 [root@zaishu sh]# str2=zaishu [root@zaishu sh]# [ "$str1" = "$str2" ] [root@zaishu sh]# echo $? 0
[root@zaishu sh]# cat str.sh #!/bin/sh str1="abc" str2="abc" str3="" echo "輸入的原始值:str1=$str1,str2=$str2" #判斷字符串是否相等 if [ "$str1" = "$str2" ];then echo "$str1 = $str2" fi echo "在[]中==與=等價" if [ "$str1" == "$str2" ];then echo "$str1 == $str2" fi #字符串不相等 if [ "$str1" != "$str2" ];then echo "[ != ]" fi #字符串不相等 if [[ "$str1" != "$str2" ]];then echo "[[ != ]]" fi #字符串不為空,長度不為0 if [ -n "$str1" ];then echo "不為空" fi #字符串為空.就是長度為0. if [ -z "$str3" ];then echo "str3長度為0,為空" fi
[root@zaishu sh]# ./str.sh 輸入的原始值:str1=abc,str2=abc abc = abc 在[]中==與=等價 abc == abc 不為空 str3長度為0,為空
- 模式匹配
[root@zaishu sh]# file=shuge.log [root@zaishu sh]# [[ "$file" == *.log ]] [root@zaishu sh]# echo $? 0 [root@zaishu sh]# [[ "$file" == *.txt ]] [root@zaishu sh]# echo $? 1 [root@zaishu sh]# [[ "$file" != *.txt ]] [root@zaishu sh]# echo $? 0
[root@zaishu sh]# cat str.sh #!/bin/sh str3="def" echo "==的功能在[[]]和[]中的行為是不同的" #如果$str3以”d”開頭(模式匹配)那么將為true if [[ "$str3" == d* ]];then echo "str3是以d開頭的" fi #如果$str3在進行字符匹配時候,結果為false if [ "$str3" == d* ];then echo "==/"d*/"" fi if [[ "$str3" == "d*" ]];then echo "==/"d*/"" fi #結果為true if [[ "$str3" = d* ]];then echo "=/"d*/"" fi
[root@zaishu sh]# ./str.sh #==的功能在[[]]和[]中的行為是不同的 #str3是以d開頭的 #=/d*/
- 正則表達式匹配
[root@zaishu sh]# [[ "$file" =~ \txt$ ]] [root@zaishu sh]# echo $? 1
[root@zaishu sh]# [[ "$file" =~ \log$ ]] //字符串是以log結尾 [root@zaishu sh]# echo $? 0
[root@zaishu sh]# num=10 [root@zaishu sh]# [[ "$num" =~ ^[0-9]+$ ]] [root@zaishu sh]# echo $? 0
[root@zaishu sh]# str=a10 [root@zaishu sh]# [[ "$str" =~ ^[0-9]+$ ]] [root@zaishu sh]# echo $? 1
[root@zaishu sh]# ip=10.11.12.13
[root@zaishu sh]# [[ "$ip" =~ ^([0-9]{1,3}.){3}[0-9]{1,3}$ ]] //用于匹配IP
[root@zaishu sh]# echo $?
0
總結
到此這篇關于shell的條件測試,變量測試,表達式中的0和1,數值判斷,字符串判斷的文章就介紹到這了,更多相關shell 條件測試,變量測試內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
通過短信發(fā)送LOG歸類號碼發(fā)送情況的shell腳本
通過短信發(fā)送LOG歸類號碼發(fā)送情況的shell腳本,有需要的朋友可以參考下2013-02-02

