Shell while循環詳解

while 循環是 Shell 腳本中最簡單的一種循環,當條件知足時,while 重複地執行一組語句,當條件不知足時,就退出 while 循環。

Shell while 循環的用法以下:html

while condition
do
    statements
doneshell

condition表示判斷條件,statements表示要執行的語句(能夠只有一條,也能夠有多條),dodone都是 Shell 中的關鍵字。

while 循環的執行流程爲:bash

  • 先對 condition 進行判斷,若是該條件成立,就進入循環,執行 while 循環體中的語句,也就是 do 和 done 之間的語句。這樣就完成了一次循環。
  • 每一次執行到 done 的時候都會從新判斷 condition 是否成立,若是成立,就進入下一次循環,繼續執行 do 和 done 之間的語句,若是不成立,就結束整個 while 循環,執行 done 後面的其它 Shell 代碼。
  • 若是一開始 condition 就不成立,那麼程序就不會進入循環體,do 和 done 之間的語句就沒有執行的機會。


注意,在 while 循環體中必須有相應的語句使得 condition 愈來愈趨近於「不成立」,只有這樣才能最終退出循環,不然 while 就成了死循環,會一直執行下去,永無休止。

while 語句和 if else 語句中的 condition 用法都是同樣的,你能夠使用 test 或 [] 命令,也能夠使用 (()) 或 [[]],遺忘的讀者請猛擊下面的連接回顧:spa

while 循環舉例

【實例1】計算從 1 加到 100 的和。.net

  1. #!/bin/bash
  2. i=1
  3. sum=0
  4. while ((i <= 100))
  5. do
  6. ((sum += i))
  7. ((i++))
  8. done
  9. echo "The sum is: $sum"

運行結果:
The sum is: 5050

在 while 循環中,只要判斷條件成立,循環就會執行。對於這段代碼,只要變量 i 的值小於等於 100,循環就會繼續。每次循環給變量 sum 加上變量 i 的值,而後再給變量 i 加 1,直到變量 i 的值大於 100,循環纔會中止。

i++語句使得 i 的值逐步增大,讓判斷條件愈來愈趨近於「不成立」,最終退出循環。

對上面的例子進行改進,計算從 m 加到 n 的值。code

  1. #!/bin/bash
  2. read m
  3. read n
  4. sum=0
  5. while ((m <= n))
  6. do
  7. ((sum += m))
  8. ((m++))
  9. done
  10. echo "The sum is: $sum"

運行結果:
1↙
100↙
The sum is: 5050

【實例2】實現一個簡單的加法計算器,用戶每行輸入一個數字,計算全部數字的和。htm

  1. #!/bin/bash
  2. sum=0
  3. echo "請輸入您要計算的數字,按 Ctrl+D 組合鍵結束讀取"
  4. while read n
  5. do
  6. ((sum += n))
  7. done
  8. echo "The sum is: $sum"

運行結果:
12↙
33↙
454↙
6767↙
1↙
2↙
The sum is: 7269

在終端中讀取數據,能夠等價爲在文件中讀取數據,按下 Ctrl+D 組合鍵表示讀取到文件流的末尾,此時 read 就會讀取失敗,獲得一個非 0 值的退出狀態,從而致使判斷條件不成立,結束循環。ip

相關文章
相關標籤/搜索