while 循環是 Shell 腳本中最簡單的一種循環,當條件滿足時,while 重復地執行一組語句,當條件不滿足時,就退出 while 循環。
Shell while 循環的用法如下:
while condition
do
statements
done
condition
表示判斷條件,statements
表示要執行的語句(可以只有一條,也可以有多條),do
和done
都是 Shell 中的關鍵字。
while 循環的執行流程為:
- 先對 condition 進行判斷,如果該條件成立,就進入循環,執行 while 循環體中的語句,也就是 do 和 done 之間的語句。這樣就完成了一次循環。
- 每一次執行到 done 的時候都會重新判斷 condition 是否成立,如果成立,就進入下一次循環,繼續執行 do 和 done 之間的語句,如果不成立,就結束整個 while 循環,執行 done 后面的其它 Shell 代碼。
- 如果一開始 condition 就不成立,那么程序就不會進入循環體,do 和 done 之間的語句就沒有執行的機會。
注意,在 while 循環體中必須有相應的語句使得 condition 越來越趨近於“不成立”,只有這樣才能最終退出循環,否則 while 就成了死循環,會一直執行下去,永無休止。
while 語句和 if else 語句中的 condition 用法都是一樣的,你可以使用 test 或 [] 命令,也可以使用 (()) 或 [[]],遺忘的讀者請猛擊下面的鏈接回顧:
while 循環舉例
【實例1】計算從 1 加到 100 的和。
- #!/bin/bash
- i=1
- sum=0
- while ((i <= 100))
- do
- ((sum += i))
- ((i++))
- done
- echo "The sum is: $sum"
運行結果:
The sum is: 5050
在 while 循環中,只要判斷條件成立,循環就會執行。對於這段代碼,只要變量 i 的值小於等於 100,循環就會繼續。每次循環給變量 sum 加上變量 i 的值,然后再給變量 i 加 1,直到變量 i 的值大於 100,循環才會停止。i++
語句使得 i 的值逐步增大,讓判斷條件越來越趨近於“不成立”,最終退出循環。
對上面的例子進行改進,計算從 m 加到 n 的值。
- #!/bin/bash
- read m
- read n
- sum=0
- while ((m <= n))
- do
- ((sum += m))
- ((m++))
- done
- echo "The sum is: $sum"
運行結果:
1↙
100↙
The sum is: 5050
【實例2】實現一個簡單的加法計算器,用戶每行輸入一個數字,計算所有數字的和。
- #!/bin/bash
- sum=0
- echo "請輸入您要計算的數字,按 Ctrl+D 組合鍵結束讀取"
- while read n
- do
- ((sum += n))
- done
- echo "The sum is: $sum"
運行結果:
12↙
33↙
454↙
6767↙
1↙
2↙
The sum is: 7269
在終端中讀取數據,可以等價為在文件中讀取數據,按下 Ctrl+D 組合鍵表示讀取到文件流的末尾,此時 read 就會讀取失敗,得到一個非 0 值的退出狀態,從而導致判斷條件不成立,結束循環。