新聞中心
[[ ]]是 Shell 內置關鍵字,它和 test 命令類似,也用來檢測某個條件是否成立。
在敖漢等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供做網站、成都網站制作 網站設計制作按需求定制設計,公司網站建設,企業(yè)網站建設,品牌網站建設,營銷型網站建設,成都外貿網站建設公司,敖漢網站建設費用合理。
test 能做到的,[[ ]] 也能做到,而且 [[ ]] 做的更好;test 做不到的,[[ ]] 還能做到??梢哉J為 [[ ]] 是 test 的升級版,對細節(jié)進行了優(yōu)化,并且擴展了一些功能。
[[ ]] 的用法為:
[[ expression ]]
當 [[ ]] 判斷 expression 成立時,退出狀態(tài)為 0,否則為非 0 值。注意
[[ ]]和
expression之間的空格,這兩個空格是必須的,否則會導致語法錯誤。
[[ ]] 不需要注意某些細枝末節(jié)
[[ ]] 是 Shell 內置關鍵字,不是命令,在使用時沒有給函數傳遞參數的過程,所以 test 命令的某些注意事項在 [[ ]] 中就不存在了,具體包括:
- 不需要把變量名用雙引號
""包圍起來,即使變量是空值,也不會出錯。 - 不需要、也不能對 >、< 進行轉義,轉義后會出錯。
請看下面的演示代碼:
#!/bin/bash
read str1
read str2
if [[ -z $str1 ]] || [[ -z $str2 ]] #不需要對變量名加雙引號
then
echo "字符串不能為空"
elif [[ $str1 < $str2 ]] #不需要也不能對 < 進行轉義
then
echo "str1 < str2"
else
echo "str1 >= str2"
fi
運行結果:
http://c.biancheng.net/shell/
http://data.biancheng.net/
str1 < str2
[[ ]] 支持邏輯運算符
對多個表達式進行邏輯運算時,可以使用邏輯運算符將多個 test 命令連接起來,例如:
[ -z "$str1" ] || [ -z "$str2" ]
你也可以借助選項把多個表達式寫在一個 test 命令中,例如:
[ -z "$str1" -o -z "$str2" ]
但是,這兩種寫法都有點“別扭”,完美的寫法是在一個命令中使用邏輯運算符將多個表達式連接起來。我們的這個愿望在 [[ ]] 中實現(xiàn)了,[[ ]] 支持 &&、|| 和 ! 三種邏輯運算符。
使用 [[ ]] 對上面的語句進行改進:
[[ -z $str1 || -z $str2 ]]
這種寫法就比較簡潔漂亮了。
注意,[[ ]] 剔除了 test 命令的-o和-a選項,你只能使用 || 和 &&。這意味著,你不能寫成下面的形式:
[[ -z $str1 -o -z $str2 ]]
當然,使用邏輯運算符將多個 [[ ]] 連接起來依然是可以的,因為這是 Shell 本身提供的功能,跟 [[ ]] 或者 test 沒有關系,如下所示:
[[ -z $str1 ]] || [[ -z $str2 ]]
| test 或 [] | [[ ]] | ||
|---|---|---|---|
| [ -z "$str1" ] || [ -z "$str2" ] | √ | [[ -z $str1 ]] || [[ -z $str2 ]] | √ |
| [ -z "$str1" -o -z "$str2" ] | √ | [[ -z $str1 -o -z $str2 ]] | × |
| [ -z $str1 || -z $str2 ] | × | [[ -z $str1 || -z $str2 ]] | √ |
[[ ]] 支持正則表達式
在 Shell [[ ]] 中,可以使用
=~來檢測字符串是否符合某個正則表達式,它的用法為:
[[ str =~ regex ]]
str 表示字符串,regex 表示正則表達式。
下面的代碼檢測一個字符串是否是手機號:
#!/bin/bash
read tel
if [[ $tel =~ ^1[0-9]{10}$ ]]
then
echo "你輸入的是手機號碼"
else
echo "你輸入的不是手機號碼"
fi
運行結果1:
13203451100
你輸入的是手機號碼
運行結果2:
132034511009
你輸入的不是手機號碼
對
^1[0-9]{10}$的說明:
-
^匹配字符串的開頭(一個位置); -
[0-9]{10}匹配連續(xù)的十個數字; -
$匹配字符串的末尾(一個位置)。
本文并不打算講解正則表達式的語法,不了解的讀者請猛擊《正則表達式30分鐘入門教程》。
總結
有了 [[ ]],你還有什么理由使用 test 或者 [ ],[[ ]] 完全可以替代之,而且更加方便,更加強大。
但是 [[ ]] 對數字的比較仍然不友好,所以我建議,以后大家使用 if 判斷條件時,用 (()) 來處理整型數字,用 [[ ]] 來處理字符串或者文件。
文章標題:Shell[[]]詳解:檢測某個條件是否成立
URL分享:http://m.5511xx.com/article/cdeijie.html


咨詢
建站咨詢
