天天看點

Linux之shell程式設計篇-----Shell 流程控制Linux系列文章Linux系列文章都弄成 pdf 檔案上傳至資源下載下傳啦:點選這裡

Shell 流程控制

1. 判斷語句

1.1 if判斷

  • if else-if else 文法格式:
if condition1
then
    command1
elif condition2
then
    command2
else
    commandN
fi
           
  • 或者:
if [ 條件判斷式 ];then

程式

fi
           
  • 以下執行個體判斷兩個變量是否相等:
a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "沒有符合的條件"
fi
# a 小于 b
           
  • 注意:

    和Java、PHP等語言不一樣,sh的流程控制不可為空。如果else分支沒有語句執行,就不要寫這個else。

1.2 case語句

  • Shell case語句為多選擇語句。可以用case語句比對一個值與一個模式,如果比對成功,執行相比對的指令。case語句格式如下:
case 值 in
模式1)
    command1
    command2
    commandN
    ;;
模式2)
    command1
    command2
    commandN
    ;;
esac
           
  • case工作方式如上所示。取值後面必須為單詞in,每一模式必須以右括号結束。取值可以為變量或常數。比對發現取值符合某一模式後,其間所有指令開始執行直至 ;;。
  • 取值将檢測比對的每一個模式。一旦模式比對,則執行完比對模式相應指令後不再繼續其他模式。如果無一比對模式,使用星号 * 捕獲該值,再執行後面的指令。
  • 下面的腳本提示輸入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
           

2. 循環語句

2.1 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循環使用指令行的位置參數。
  • 例如,順序輸出目前清單中的數字:
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
           

2.2 while 語句

  • while循環用于不斷執行一系列指令,也用于從輸入檔案中讀取資料;指令通常為測試條件。其格式為:
while condition
do
    command
done
           
  • 以下是一個基本的while循環,測試條件是:如果int小于等于5,那麼條件傳回真。int從0開始,每次循環處理時,int加1。運作上述腳本,傳回數字1到5,然後終止。
#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done
#運作腳本,輸出:
# 1
# 2
# 3
# 4
# 5
           
  • 以上執行個體使用了 Bash let 指令,它用于執行一個或多個表達式,變量計算中不需要加上 $ 來表示變量,具體可查閱:Bash let 指令

2.3 until循環

  • until 循環執行一系列指令直至條件為 true 時停止。
  • until 循環與 while 循環在處理方式上剛好相反。
  • 一般 while 循環優于 until 循環,但在某些時候—也隻是極少數情況下,until 循環更加有用。
  • until 文法格式:
until condition
do
    command
done
           
  • condition 一般為條件表達式,如果傳回值為 false,則繼續執行循環體内的語句,否則跳出循環。
  • 以下執行個體我們使用 until 指令來輸出 0 ~ 9 的數字:
#!/bin/bash

a=0

until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done
           

2.4 跳出循環

  • 在循環過程中,有時候需要在未達到循環結束條件時強制跳出循環,Shell使用兩個指令來實作該功能:break和continue。
2.4.1 break指令
  • break指令允許跳出所有循環(終止執行後面的所有循環)。
  • 下面的例子中,腳本進入死循環直至使用者輸入數字大于5。要跳出這個循環,傳回到shell提示符下,需要使用break指令。
#!/bin/bash
while :
do
    echo -n "輸入 1 到 5 之間的數字:"
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你輸入的數字為 $aNum!"
        ;;
        *) echo "你輸入的數字不是 1 到 5 之間的! 遊戲結束"
            break
        ;;
    esac
done
#執行以上代碼,輸出結果為:
#
#輸入 1 到 5 之間的數字:3
#你輸入的數字為 3!
#輸入 1 到 5 之間的數字:7
#你輸入的數字不是 1 到 5 之間的! 遊戲結束
           
2.4.2 continue
  • continue指令與break指令類似,隻有一點差别,它不會跳出所有循環,僅僅跳出目前循環。

    對上面的例子進行修改:

#!/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 "遊戲結束"
        ;;
    esac
done

#運作代碼發現,當輸入大于5的數字時,該例中的循環不會結束,語句 echo "遊戲結束" 永遠不會被執行。
           

Linux系列文章

  • Linux簡介和Linux基本目錄結構
  • linux實操篇之-----vi和vim編輯器
  • linux實操之----使用者管理和關機、重新開機和使用者登入登出
  • linux實操之----linux實用指令
  • Linux實操之----包管理工具(RPM和YUM)
  • Linux實操之----組管理、權限管理和定時任務排程
  • Linux實操之---- Linux程序管理(重要)
  • Linux實操之-----Linux磁盤分區、挂載度
  • Linux實操之----Linux網絡配置
  • Linux之shell程式設計篇-----shell簡介和shell變量
  • Linux之shell程式設計篇-----shell字元串和shell數組
  • Linux之shell程式設計篇-----shell運算符
  • Linux之shell程式設計篇-----Shell列印輸出指令和Shell test 指令
  • Linux之shell程式設計篇-----Shell 流程控制
  • Linux之shell程式設計篇-----Shell 函數和Shell 輸入/輸出重定向

Linux系列文章都弄成 pdf 檔案上傳至資源下載下傳啦:點選這裡

各位大大嫌打開網頁麻煩,可以支援小弟一下,友善查閱和學習!

感謝您認真觀看到這裡!

繼續閱讀