0001- if else
Shell的流程控制不可爲空,如果else分支沒有語句執行,就不要寫這個else。
1’if的語句語法
if conition
then
command1
command2
...
commandn
fi
適用於終端命令提示符的語句語法:
if [$(ps -ef |grep -c "ssh") -gt 1 ]; then echo "ture"; fi
2’ if else的語句語法
if condition
then
command1
command2
...
commandn
else
command
fi
3’ if else-if else 的語句語法
if conition
then
command1
elif conition2
then
command2
else
commandn
fi
- 實例1:判斷兩個變量是否相等:
a=10
b=20
if [ $a == $b ]
then
echo "a 等於 b"
elif [ $a -gt $b ]
then
echo "a 大於 b"
else
echo "a 小於 b"
fi
運行結果:
a 小於 b
-gt 是test命令中的用法,代表大於則爲真,if else 語句經常與test命令結合使用,在test命令中介紹。
0010-for循環
for循環一般格式:
for var in item1 item2 ... itemn
do
command1
command2
...
commandn
done
適用於終端命令提示符的語句語法:
for var in item1 item2 ... itemn; do command1; command2 ... done;
-
當變量值在列表中,for循環即執行一次所有命令,使用變量名獲取列表中的當前取值。
-
命令可爲任何有效的Shell命令和語句
-
in 列表可以包含替換、字符串和文件名
-
in列表是可選的,如果不用它,for循環使用命令行的位置參數
-
實例2: 順序輸出當前列表中的數字:
for loop in 1 2 3 4 5
do
echo "The value is :$loop"
done
運行結果:
The value is :1
The value is :2
The value is :3
The value is :4
The value is :5
- 實例3: 順序輸出字符串中的字符:
for str in 'This is a string' '你好!'
do
echo $str
done
運行結果:
This is a string
你好!
for 循環的無限循環的格式:
for (( ; ; ))
0011-while 語句
while 循環用於不斷執行一系列命令,也用於叢書如文件中讀取數據;命令通常爲測試條件。
1’while循環的一般格式:
while conition
do
command
done
- 實例4:測試條件:如果int小於等於5,那麼條件返回真。int從0開始,每次循環處理時,int加1.
#!/bin/bash
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
運行結果:
1
2
3
4
5
以上實例使用了Bash let 命令,它用於執行一個或多個表達式,變量計算中不需要加上$來表示變量。
- 實例5 :while循環可用於讀取鍵盤信息。
echo '按下<CTRL -D> 退出'
echo -n '輸入你的名字:'
while read Name
do
echo "你的名字是:$Name"
done
運行結果:
按下<CTRL -D> 退出
輸入你的名字:cool
你的名字是:cool
2’while循環的無限循環
while :
do
command
done
或
while ture
do
command
done
0100-Until 循環
until循環執行一系列命令直至條件爲ture時停止。
until循環與while循環在處理方式上剛好相反。
until語句語法格式:
until condition
do
command
done
condition一般爲條件表達式,如果返回值爲false,則繼續執行循環體內的語句,否則跳出循環。
- 實例6:使用until命令輸出0~9的數字:
#!/bin/bash
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
運行結果:
0
1
2
3
4
5
6
7
8
9
-lt 是test命令中的用法,代表小於則爲真,if else 語句經常與test命令結合使用,在test命令中介紹。
expr 執行的意思,expr $a + 1
就是執行a+=1,使變量a加1.
0101-case 多選擇語句
Shell case語句爲多選擇語句。可以用case語句匹配一個值與一個模式,如果匹配成功,執行相匹配的命令。
case語句語法格式:
case var in
mode1)
command1
command2
...
commandn
;;
mode2)
command1
command2
...
commandn
;;
esac
-
case 取值後面必須是in,每一模式必須以右括號結束。
-
取值可以爲變量或常數。
-
匹配發現取值符合某一模式後,其間所有命令開始執行直至;;
-
取值將檢測匹配的每一個模式,則執行完匹配模式相應命令後不再繼續其他模式。
-
如果無一匹配模式。使用星號*捕獲該值,再執行後面的命令。
-
實例7: 提示輸入1到4,與每一種模式進行匹配:
echo '輸入1到4之間的數字:'
echo '你輸入的數字是:'
read aNum
case $aNum in
1) echo '你選擇了1'
;;
2) echo '你選擇了2'
;;
3) echo '你選擇了3'
;;
4) echo '你選擇了4'
;;
*) echo '你沒有輸入1到4的數字'
;;
esac
運行結果:
輸入1到4之間的數字:
你輸入的數字是:
3
你選擇了3
0110-跳出循環
1’break命令
break命令允許跳出所有循環(終止執行後面的所有循環)。
實例8: 腳本進入死循環直至用戶輸入數字大於5:
#!/bin/bash
while :
do
echo -n "輸入1到5之間的數字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你輸入的數字是 $aNum !"
;;
*) echo "你輸入的數字不是1到5之間的數字!遊戲結束!"
break
;;
easc
done
運行結果:
輸入1到5之間的數字:3
你輸入的數字是3 !
輸入1到5之間的數字:7
你輸入的數字不是1到5之間的數字!遊戲結束!
2’continue命令
continue命令和break命令一樣,只有一點差別,他不會跳出所有循環,僅僅跳出當前循環。
修改後的實例8:
#!/bin/bash
while :
do
echo -n "輸入1到5之間的數字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你輸入的數字是 $aNum !"
;;
*) echo "你輸入的數字不是1到5之間的數字!"
continue
echo "遊戲結束!"
;;
easc
done
運行結果:
輸入1到5之間的數字:3
你輸入的數字是3 !
輸入1到5之間的數字:7
你輸入的數字不是1到5之間的數字!
輸入1到5之間的數字:2
你輸入的數字是2 !
運行代碼發現,當輸入的數字大於5,實例中的循環沒有結束,語句 echo “遊戲結束!” 永遠不會被執行。