Shell_7_邏輯結構

https://www.jianshu.com/p/3557bf2da86a

一、if 判斷

if ... then ... fi

單層
如果 是真的 那麼 ...

if [ 條件判斷式 ];then
    當條件判斷式成立時,可以進行的命令。
fi   # 結束這個判斷語句結構

if ... then ... else....fi

多重、複雜條件判斷式
如果 是真的 那麼 ... 否則 ...

一顆紅心,兩手準備

if [ 條件判斷式 ]; then
    當條件判斷式成立時,可以進行的指令工作內容;
else
    當條件判斷式不成立時,可以進行的指令工作內容;
fi

if ... elif ... elif ... else ... fi

多個條件判斷 (if ... elif ... elif ... else) 分多種不同情況執行


if [ 條件判斷式一 ]; then
    當條件判斷式一成立時,可以進行的指令工作內容;
elif [ 條件判斷式二 ]; then
    當條件判斷式二成立時,可以進行的指令工作內容;
else
    當條件判斷式一與二均不成立時,可以進行的指令工作內容;
fi

注意
elif 也是個判斷式,因此出現 elif 後面都要接 then 來處理!但是 else 已經是最後的沒有成立的結果了, 所以 else 後面並沒有 then

實戰案例

服務狀態檢測工具

通過獲取目前系統中監聽的端口,判斷都有那些服務處於運行狀態


二、 利用 case ..... esac 判斷

基本語法

case  $變量名稱 in   <==關鍵字爲 case ,還有變量前有錢字號
  "第一個變量內容")   <==每個變量內容建議用雙引號括起來,關鍵字則爲小括號 )
    程序段
    ;;            <==每個類別結尾使用兩個連續的分號來處理!
  "第二個變量內容")
    程序段
    ;;
  *)                  <==最後一個變量內容都會用 * 來代表所有其他值
    不包含第一個變量內容與第二個變量內容的其他程序運行段
    exit 1
    ;;
esac                  <==反過來寫,結束當前語句結構!

運維工具箱


========================================================

模式還可以是多個

#!/bin/bash
cat << EOF
m|M) show memory usages;
d|D) show disk usages;
q|Q) quit
EOF
read -p "Your choice" choice
case $choice in
m|M)
        free -m
        ;;
d|D)
        df -h
        ;;
q|Q)
        exit
        ;;
*)
        eco "Invalid input"
        ;;
esac

三、while ... do ... done (不確定的循環)

while [ condition ]  ==>中括號內的狀態就是判斷式
do            ==> do 是循環的開始!
    代碼段
    代碼段
done          ==> done 是循環的結束

五、 for do done (固定的循環)

for var in con1 con2 con3 ...
do
    程序段
done

var 是變量名
con1 con2 con3 是常量,就是具體的數據
也可以是一個已經被賦值的變量, 寫法 {val1}{val2}

以上面的例子來說,這個 $var 的變量內容在循環工作時:

  1. 第一次循環時, $var 的內容爲 con1 ;
  2. 第二次循環時, $var 的內容爲 con2 ;
  3. 第三次循環時, $var 的內容爲 con3 ;
  4. ....

數值運算

➜  ~ n=1
➜  ~ let n++
➜  ~ echo $n
2
➜  ~ (( n++ ))
➜  ~ echo $n
3
➜  ~ a=2
➜  ~ b=3
➜  ~ let f=a+b
➜  ~ echo $n
3
➜  ~ echo $f
5
➜  ~ let f = a + b     ==> 錯誤
zsh: bad math expression: operand expected at `='
➜  ~ let "f = a + b"
➜  ~ echo $f
5

for 循環中 變量的取值方式

a. 從一組字符串中取值

for  var     in    one    two    three   four   five 
do
    echo    "****************************"
    echo   '$var   is '    $var
done

b. 從位置變量中取值

for    var
do
    echo  '-----------------------------'
    echo   '$var   is '    $var
done

c. 從累計變化的格式中取值

#!/bin/bash 

for    ((var=1;var<=10;var++))
do
    echo   "------------------------" 
    echo   '$var   is '    $var
done

d. 從命令結果中取值

#!/bin/bash
for   var   in   $(cat    file.txt)
do
    echo  " ------------------------" 
    echo   '$var   is '    $var
done

六、break 和 continue

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章