Bash 初學者系列 8:bash 中的循環
for 循環
for 循環有兩種不同的寫法:
- c 語言樣式的 for 循環;
- 列表中使用的 for 循環。
c 語言樣式的 for 循環
如果你熟悉 c 或者 c++等編程語言,那么對于如下循環應該不會陌生:?
根據上述語法,我們寫一個例子,打印 Hello Friend 十次:?
上述代碼中,首先將整型變量 i 初始化為 0,然后設置循環條件(i<10),如果條件為真,則執行循環,打印 Hello Friend,并將變量 i 遞增 1,然后進行下一次循環,知道 i<10不再滿足。?
列表中使用的 for 循環
列表循環是 for 循環的一種變體,這在處理列表或者數組的時候特別方便,其語法如下:?
比如,我們重寫一下上面的那個例子:?
另一個例子,下面腳本 var.sh 將打印在 /var 目錄下的所有文件和目錄:?
執行一下,其輸出如下:?
while 循環
while 循環是 bash 中另一個應用很廣泛的循環,其語法如下:?
作為演示,我創建一個名為 3x10.sh 的腳本,用于打印前10個3的倍數:?
其執行結果如下:?
上述腳本中,首先將變量 num 初始化為 1,然后設定循環條件為 num 小于或等于 10。在循環體中,打印 num 乘以 3,然后將 num 遞增 1。
until 循環
如果你有 c/c++ 編程背景,那你可能會不自覺的找 do-while 循環。但是,在 bash 中并不存在 do-while 循環。
bush 中存在另一種循環,即 until 循環,其與 while 循環具有相同的語法:?
until 循環與 while 循環之間的主要區別在于循環條件。當循環條件為真時,while 循環會繼續,但是,當循環條件為假時,until 循環才會繼續。
比如上面我們寫的 3x10.sh 腳本,我們使用 until 循環來實現,如下:?
大家應該可以注意到,上面的循環條件為 $num -gt 10,為前一個例子中 -le 的否定。
循環的具體應用
上面我們介紹了 bash 中循環的用法,下面在實際例子中介紹一下循環的使用。
打印數組的內容
在此之前,我們假定大家了解 ??bash 中的數組??。
遍歷數組,for 循環通常是最首要的選擇。
如下腳本 prime.sh 中,將會遍歷并打印出數組中的所有元素:?
執行一下,結果如下:?
在循環中使用 break 和 continue
有時候我們可能希望提前退出循環,或者跳過本次循環。那么此時需要分別使用 break 和 continue。
break 將會終止循環,并將程序控制轉到循環后的下一個命令或指令。
比如,下面的循環只會打印從 1 到 3:
使用 continue 語句會跳過本次循環,繼續執行下次循環。比如,下面腳本 odd.sh 只會打印從 1 到 10 之間的奇數,而跳過偶數:
執行結果如下:?
無限循環
無限循環是一個永遠運行的循環,其循環條件始終為真。大多數情況下,無限循環是因為邏輯錯誤造成的bug。
例如,有人可能希望創建一個循環,以降序打印數字1到10,結果可能會錯誤地創建以下無限循環:?
上述錯誤是將 i 遞增 1。要修復這個問題需要將遞增改為遞減 i--:?
在某些情況下,我們可能希望有意創建無限循環,以等待系統滿足外部條件。如下所示:?
如果想要創建一個無限 while 循環,可參考如下:?