0101-Shell流程控制

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 “遊戲結束!” 永遠不會被執行。

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