老男孩shell運維實戰例題說明python
背景知識:雙中括號[[]]正則表達式
①[[是 bash 程序語言的關鍵字。並非一個命令,` ` 結構比[ ]結構更加通用。在[[和]]之間全部的字符都不會發生文件名擴展或者單詞分割,可是會發生參數擴展和命令替換。shell
②支持字符串的模式匹配,使用=~操做符時甚至支持shell的正則表達式。字符串比較時能夠把右邊的做爲一個模式,而不單單是一個字符串,好比[[ hello == hell? ]],結果爲真。` ` 中匹配字符串或通配符,不須要引號。bash
③使用` `.``.``.` `條件判斷結構,而不是[ ... ],可以防止腳本中的許多邏輯錯誤。好比,&&、||、<和> 操做符可以正常存在於` `條件判斷結構中,可是若是出如今[ ]結構中的話,會報錯。好比能夠直接使用if [[ $a != 1 && $a != 2 ]], 若是不適用雙括號, 則爲if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。運維
④bash把雙中括號中的表達式看做一個單獨的元素,並返回一個退出狀態碼。
例子: ide
if ($i<5) if [ $i -lt 5 ] if [ $a -ne 1 -a $a != 2 ] if [ $a -ne 1] && [ $a != 2 ] if [[ $a != 1 && $a != 2 ]] for i in $(seq 0 4);do echo $i;done for i in `seq 0 4`;do echo $i;done for ((i=0;i<5;i++));do echo $i;done for i in {0..4};do echo $i;done
老男孩書中例題以下:spa
#!/bin/sh cat <<END 1.panxiaoting 2.gongli 3.fanbingbing END read -p "Which do you like?,Pls input the num:" a [ "$a" = "1" ] && { echo "I guess,you like panxiaoting" exit 1 } [ "$a" = "2" ] && { echo "I guess,you like gongli" exit 1 } [ "$a" = "3" ] && { echo "I guess,you like fangbingbing" exit 1 } [[ ! "$a" =~ [1-3] ]] && { ###支持字符串的模式匹配,使用=~操做符時甚至支持shell的正則表達式 echo "I guess,you are not man." }
說明:.net
其中[[ ! "$a" =~ [1-3] ]]能夠替換成[ "$a" != "1","2","3" ]或[[ "$a" != "1","2","3" ]]code