天天看點

老男孩shell運維實戰例題說明

老男孩shell運維實戰例題說明

背景知識:雙中括号[[]]

    ①[[是 bash 程式語言的關鍵字。并不是一個指令,` ` 結構比[ ]結構更加通用。在[[和]]之間所有的字元都不會發生檔案名擴充或者單詞分割,但是會發生參數擴充和指令替換。

    ②支援字元串的模式比對,使用=~操作符時甚至支援shell的正規表達式。字元串比較時可以把右邊的作為一個模式,而不僅僅是一個字元串,比如[[ hello == hell? ]],結果為真。` ` 中比對字元串或通配符,不需要引号。

    ③使用` `.``.``.` `條件判斷結構,而不是[ ... ],能夠防止腳本中的許多邏輯錯誤。比如,&&、||、<和> 操作符能夠正常存在于` `條件判斷結構中,但是如果出現在[ ]結構中的話,會報錯。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用雙括号, 則為if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。

    ④bash把雙中括号中的表達式看作一個單獨的元素,并傳回一個退出狀态碼。

例子: 

老男孩shell運維實戰例題說明
老男孩shell運維實戰例題說明

老男孩書中例題如下:

說明:

其中[[ ! "$a" =~ [1-3] ]]可以替換成[ "$a" != "1","2","3" ]或[[ "$a" != "1","2","3" ]]