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 是常量,就是具體的數據
也可以是一個已經被賦值的變量, 寫法 {val2}
以上面的例子來說,這個
$var
的變量內容在循環工作時:
- 第一次循環時,
$var
的內容爲 con1 ;- 第二次循環時,
$var
的內容爲 con2 ;- 第三次循環時,
$var
的內容爲 con3 ;- ....
數值運算
➜ ~ 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