欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell[[]]檢測某個條件是否成立

 更新時間:2023年01月12日 10:10:05   作者:富士康質(zhì)檢員張全蛋  
本文主要介紹了Shell[[]]檢測某個條件是否成立,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

[[ ]]是 Shell 內(nèi)置關(guān)鍵字,它和 test 命令類似,也用來檢測某個條件是否成立。

test 能做到的,[[ ]] 也能做到,而且 [[ ]] 做的更好;test 做不到的,[[ ]] 還能做到??梢哉J(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 命令的某些注意事項在 [[ ]] 中就不存在了,具體包括:

不需要把變量名用雙引號""包圍起來,即使變量是空值,也不會出錯。
不需要、也不能對 >、< 進(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" ]

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

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

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

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

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

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

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

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

當(dāng)然,使用邏輯運(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ù)字,用 [[ ]] 來處理字符串或者文件。

到此這篇關(guān)于Shell[[]]檢測某個條件是否成立的文章就介紹到這了,更多相關(guān)Shell[[]]檢測條件成立內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • shell實現(xiàn)貪吃蛇的示例代碼

    shell實現(xiàn)貪吃蛇的示例代碼

    本文主要介紹了shell實現(xiàn)貪吃蛇的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • shell統(tǒng)計pv和uv、獨(dú)立ip的方法

    shell統(tǒng)計pv和uv、獨(dú)立ip的方法

    這篇文章主要介紹了shell統(tǒng)計pv和uv、獨(dú)立ip的方法,需要的朋友可以參考下
    2014-04-04
  • 防止shell腳本重復(fù)執(zhí)行的代碼

    防止shell腳本重復(fù)執(zhí)行的代碼

    利用鎖機(jī)制,讓一個特定的shell腳本,每次只能運(yùn)行一個實例。具體來說,獲得鎖的腳本實例,能夠繼續(xù)往下執(zhí)行臨界區(qū)代碼;沒有獲得鎖的實例,則只能等待
    2013-01-01
  • Linux 打包壓縮命令詳解

    Linux 打包壓縮命令詳解

    在Linux系統(tǒng)中,有多種命令可以用于打包和壓縮文件,這些命令可以幫助用戶將多個文件或目錄打包成一個文件,并可以選擇不同的壓縮算法來減小文件大小,下面給大家介紹Linux 打包壓縮命令詳解,感興趣的朋友一起看看吧
    2023-09-09
  • Linux命令之find?和?grep用法詳解

    Linux命令之find?和?grep用法詳解

    今天主要介紹的是兩個常用的搜索命令:find?和?grep?命令,文中代碼示例介紹的非常詳細(xì),對我們學(xué)習(xí)Linux?命令有一定的幫助,需要的朋友可以參考下
    2023-06-06
  • Linux通過sar命令查看網(wǎng)卡流量

    Linux通過sar命令查看網(wǎng)卡流量

    sar(System Activity Reporter系統(tǒng)活動情況報告)是目前 Linux 上最為全面的系統(tǒng)性能分析工具之一,這篇文章主要介紹了Linux通過sar命令查看網(wǎng)卡流量,需要的朋友可以參考下
    2017-11-11
  • Formatting Long Lines 格式化多行字符的shell腳本

    Formatting Long Lines 格式化多行字符的shell腳本

    這篇文章主要介紹了Formatting Long Lines 格式化多行字符的shell腳本,需要的朋友可以參考下
    2016-08-08
  • Shell編程之Shell變量學(xué)習(xí)總結(jié)

    Shell編程之Shell變量學(xué)習(xí)總結(jié)

    這篇文章主要介紹了Shell腳本編程中Shell變量的學(xué)習(xí)總結(jié),需要的朋友可以參考下
    2014-03-03
  • Linux?中l(wèi)s命令的使用詳細(xì)介紹

    Linux?中l(wèi)s命令的使用詳細(xì)介紹

    本文是小編整理的ls命令的基本使用方式,文中示例中的命令選項都可以進(jìn)行任意組合來使用,比如倒序排序使用"ls?-rs"命令等,對Linux?中l(wèi)s命令用法感興趣的朋友一起看看吧
    2022-06-06
  • Linux里awk中split函數(shù)的用法小結(jié)

    Linux里awk中split函數(shù)的用法小結(jié)

    The awk function split(s,a,sep) splits a string s into an awk array a using the delimiter sep
    2013-03-03

最新評論