shell的條件測試,變量測試,表達(dá)式中的0和1,數(shù)值判斷,字符串判斷
條件測試
條件測試:判斷某需求是否滿足。若真,則狀態(tài)碼變量0; 返回若假,則狀態(tài)碼變量,返回1
條件測試命令
test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]]
注意:EXPRESSION前后必須有空白字符
變量測試
-v VAR 或者 [ -v VAR] 變量VAR是否設(shè)置
注: 變量的條件測試其實就是判斷變量是否定義
[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
表達(dá)式中的0或1
表達(dá)式中的數(shù)字0或1,并不代表真假,每個表達(dá)式執(zhí)行完,退出的時候,都會返回一個退出狀態(tài)碼。if語句根據(jù) [ ] 表達(dá)式執(zhí)行的退出狀態(tài)碼進(jìn)行判斷,在所有的退出狀態(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
數(shù)值測試
-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碼 < 是否小于 == 左側(cè)字符串是否和右側(cè)的PATTERN相同 注意:此表達(dá)式用于[[ ]]中,PATTERN為通配符 =~ 左側(cè)字符串是否能夠被右側(cè)的PATTERN所匹配 注意: 此表達(dá)式用于[[ ]]中;擴(kuò)展的正則表達(dá)式
單引號和雙引號的區(qū)別
對類型來說是無關(guān)的。
單引號不對相關(guān)量進(jìn)行替換,如不對$符號解釋成變量引用,從而用對應(yīng)變量的值替代,雙引號則會進(jìn)行替代。字符匹配示例
[root@zaishu sh]# unset str [root@zaishu sh]# [ -z "str" ] //為空,所以表達(dá)式返回值為真 [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在進(jìn)行字符匹配時候,結(jié)果為false if [ "$str3" == d* ];then echo "==/"d*/"" fi if [[ "$str3" == "d*" ]];then echo "==/"d*/"" fi #結(jié)果為true if [[ "$str3" = d* ]];then echo "=/"d*/"" fi
[root@zaishu sh]# ./str.sh #==的功能在[[]]和[]中的行為是不同的 #str3是以d開頭的 #=/d*/
- 正則表達(dá)式匹配
[root@zaishu sh]# [[ "$file" =~ \txt$ ]] [root@zaishu sh]# echo $? 1
[root@zaishu sh]# [[ "$file" =~ \log$ ]] //字符串是以log結(jié)尾 [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
總結(jié)
到此這篇關(guān)于shell的條件測試,變量測試,表達(dá)式中的0和1,數(shù)值判斷,字符串判斷的文章就介紹到這了,更多相關(guān)shell 條件測試,變量測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過短信發(fā)送LOG歸類號碼發(fā)送情況的shell腳本
通過短信發(fā)送LOG歸類號碼發(fā)送情況的shell腳本,有需要的朋友可以參考下2013-02-02
linux下監(jiān)控網(wǎng)絡(luò)流量的腳本
在我們的日常工作當(dāng)中,監(jiān)控網(wǎng)絡(luò)要么使用iptarf,ifstat這些命令實現(xiàn)的,但是需要裝額外的RPM包。特別是iptarf裝起來麻煩2013-01-01
mac使用Shell(終端)SSH連接遠(yuǎn)程服務(wù)器的方法
這篇文章主要介紹了mac使用Shell(終端)SSH連接遠(yuǎn)程服務(wù)器的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

