Shell 教程:編寫 BASH 'for'循環的正確姿勢
本文我們要學會什么
- 在 Bash for循環中, do和done之間的所有語句對列表或數字范圍中的每個項目執行一次。
- 對于大列表,使用in {list} 在起點和終點之間循環。使用省略號迭代整個數字范圍,例如{1..10} 中的數字。
- 要跳過某些數字,請在范圍內添加第三個數字。例如,使用{0..100..10}僅列出每 10 個數字。
在編程或腳本語言中,Bash 提供了幾種重復代碼的方法 - 稱為循環的過程 - 其中 for 循環重復代碼的某個部分。這允許運行一系列命令,直到滿足特定條件。在本指南中,我們將向您介紹如何編寫 Bash for 循環。
如何循環遍歷列表
諸如 Bash 之類的腳本語言具有與其他語言相似的編程結構。例如,導入參數從鍵盤獲取輸入并將這些輸入存儲為變量,然后根據輸入參數的值執行特定操作。
下面是一個名為linuxmi.sh 的簡單示例腳本:
for number in 1 2 3 4 5
do
echo $number
done
exit 0
Bash 使用for循環的方式與其他編程和腳本語言處理for循環的方式有些不同。讓我們分解腳本。
在 BASH for循環中,do和done之間的所有語句對列表中的每個項目都執行一次。在此示例中,列表是in單詞之后的所有內容— 數字1 2 3 4 5。
每次循環迭代時,列表中的下一個值將插入到單詞for之后指定的變量中。在上面的循環中,變量被稱為number。
echo語句 在屏幕上顯示信息。因此,此示例采用數字 1 到 5,并將每個數字一一輸出到屏幕:
如何在起點和終點之間循環
這個 linuxmi.sh 腳本的問題在于,如果您想處理一個更大的列表(例如,1 到 500),則鍵入所有數字將花費很長時間。相反,指定一個起點和終點就簡單了:
for number in {1..10}
do
echo "$number "
done
exit 0
規則是一樣的。in這個詞后面的值組成了要迭代的列表,列表中的每個值都放在變量(即number)中,每次循環迭代時,都會執行do和done之間的語句。
主要區別在于列表的形成方式。大括號表示一個范圍,在本例這種情況下,范圍是 1 到 10(兩個點分隔范圍的開始和結束)。
因此,此示例遍歷 1 到 10 之間的每個數字并將該數字輸出到屏幕。如下:
相同的循環可以這樣編寫,語法與第一個示例相同:
for number in 1 2 3 4 5 6 7 8 9 10
如何跳過范圍內的數字
前面的示例展示了如何在起點和終點之間循環。以下是如何跳過范圍內的數字。
例如,要在 0 和 100 之間循環,但只顯示 10 的倍數的數字,請使用以下腳本獲取此輸出:
for number in {0..100..10}
do
echo "$number "
done
exit 0
規則是一樣的。在do和done之間有一個列表、一個變量和一組要執行的語句。這次的列表如下所示:{0..100..10}。
大括號中第一個數字是 0,結束數字是 100。第三個數字 (10) 是列表中將跳過的項目數。
因此,上面的示例顯示以下輸出:
一個實際的例子
For 循環不僅僅迭代數字列表。例如,使用其他命令的輸出作為列表。
以下示例顯示如何將音頻文件從MP3轉換為WAV:
for file in ./*.mp3
do
mpg -w ./wavs/"${file}".wav "$file"
done
此示例中的列表是當前文件夾中每個擴展名為 .MP3 的文件,變量是一個文件。
mpg 命令將 MP3 文件轉換為 WAV。但是,您可能需要先使用包管理器安裝此工具。