日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Shell[[]]詳解:檢測某個條件是否成立
[[ ]]是 Shell 內(nèi)置關(guān)鍵字,它和 test 命令類似,也用來檢測某個條件是否成立。

在敖漢等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需求定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,敖漢網(wǎng)站建設(shè)費(fèi)用合理。

test 能做到的,[[ ]] 也能做到,而且 [[ ]] 做的更好;test 做不到的,[[ ]] 還能做到。可以認(rèn)為 [[ ]] 是 test 的升級版,對細(xì)節(jié)進(jìn)行了優(yōu)化,并且擴(kuò)展了一些功能。

[[ ]] 的用法為:

[[ expression ]]

當(dāng) [[ ]] 判斷 expression 成立時,退出狀態(tài)為 0,否則為非 0 值。注意
[[ ]]
expression之間的空格,這兩個空格是必須的,否則會導(dǎo)致語法錯誤。

[[ ]] 不需要注意某些細(xì)枝末節(jié)

[[ ]] 是 Shell 內(nèi)置關(guān)鍵字,不是命令,在使用時沒有給函數(shù)傳遞參數(shù)的過程,所以 test 命令的某些注意事項(xiàng)在 [[ ]] 中就不存在了,具體包括:

  • 不需要把變量名用雙引號""包圍起來,即使變量是空值,也不會出錯。
  • 不需要、也不能對 >、< 進(jìn)行轉(zhuǎn)義,轉(zhuǎn)義后會出錯。

請看下面的演示代碼:

#!/bin/bash

read str1
read str2

if [[ -z $str1 ]] || [[ -z $str2 ]]  #不需要對變量名加雙引號
then
    echo "字符串不能為空"
elif [[ $str1 < $str2 ]]  #不需要也不能對 < 進(jìn)行轉(zhuǎn)義
then
    echo "str1 < str2"
else
    echo "str1 >= str2"
fi

運(yùn)行結(jié)果:

http://c.biancheng.net/shell/

http://data.biancheng.net/

str1 < str2

[[ ]] 支持邏輯運(yùn)算符

對多個表達(dá)式進(jìn)行邏輯運(yùn)算時,可以使用邏輯運(yùn)算符將多個 test 命令連接起來,例如:

[ -z "$str1" ] || [ -z "$str2" ]

你也可以借助選項(xiàng)把多個表達(dá)式寫在一個 test 命令中,例如:

[ -z "$str1" -o -z "$str2" ]

但是,這兩種寫法都有點(diǎn)“別扭”,完美的寫法是在一個命令中使用邏輯運(yùn)算符將多個表達(dá)式連接起來。我們的這個愿望在 [[ ]] 中實(shí)現(xiàn)了,[[ ]]  支持 &&、|| 和 ! 三種邏輯運(yùn)算符。

使用 [[ ]] 對上面的語句進(jìn)行改進(jìn):

[[ -z $str1 || -z $str2 ]]

這種寫法就比較簡潔漂亮了。

注意,[[ ]] 剔除了 test 命令的-o-a選項(xiàng),你只能使用 || 和 &&。這意味著,你不能寫成下面的形式:

[[ -z $str1 -o -z $str2 ]]

當(dāng)然,使用邏輯運(yùn)算符將多個 [[ ]] 連接起來依然是可以的,因?yàn)檫@是 Shell 本身提供的功能,跟 [[ ]] 或者 test 沒有關(guān)系,如下所示:

[[ -z $str1 ]] || [[ -z $str2 ]]

該表總結(jié)了各種寫法的對錯
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 ]]

[[ ]] 支持正則表達(dá)式

在 Shell [[ ]] 中,可以使用
=~來檢測字符串是否符合某個正則表達(dá)式,它的用法為:

[[ str =~ regex ]]

str 表示字符串,regex 表示正則表達(dá)式。

下面的代碼檢測一個字符串是否是手機(jī)號:

#!/bin/bash

read tel

if [[ $tel =~ ^1[0-9]{10}$ ]]
then
    echo "你輸入的是手機(jī)號碼"
else
    echo "你輸入的不是手機(jī)號碼"
fi

運(yùn)行結(jié)果1:

13203451100

你輸入的是手機(jī)號碼

運(yùn)行結(jié)果2:

132034511009

你輸入的不是手機(jī)號碼


^1[0-9]{10}$的說明:

  • ^匹配字符串的開頭(一個位置);
  • [0-9]{10}匹配連續(xù)的十個數(shù)字;
  • $匹配字符串的末尾(一個位置)。

本文并不打算講解正則表達(dá)式的語法,不了解的讀者請猛擊《正則表達(dá)式30分鐘入門教程》。

總結(jié)

有了 [[ ]],你還有什么理由使用 test 或者 [ ],[[ ]] 完全可以替代之,而且更加方便,更加強(qiáng)大。

但是 [[ ]] 對數(shù)字的比較仍然不友好,所以我建議,以后大家使用 if 判斷條件時,用 (()) 來處理整型數(shù)字,用 [[ ]] 來處理字符串或者文件。


文章題目:Shell[[]]詳解:檢測某個條件是否成立
文章起源:http://m.5511xx.com/article/cdeijie.html