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

老男孩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把雙中括號中的表達式看做一個單獨的元素,並返回一個退出狀態碼。
例子: 
在CODE上查看代碼片派生到個人代碼片ide

  1. 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

相關文章
相關標籤/搜索