HOWTO · Bash
在 Bash 中實現 for 迴圈
使用 Bash 指令碼編寫 for 迴圈迭代結構的簡單指南。
本頁內容
本教程將討論編寫 Bash for 迴圈的可用 Bash 指令碼公式。
首先,我們將學習它的基本語法和概念。稍後,我們將在 Bash 指令碼中學習它的不同型別,例如 C 風格的 for 迴圈表示法和 foreach 或 for-in 風格。
最後,我們將討論分號 ; 的問題。在 bash 提示符中進行 for 迴圈時。
Bash for 迴圈
程式設計或指令碼語言中的迴圈是一種迭代控制結構,用於重複執行一個語句或一組語句,直到不滿足某個條件。
for 迴圈是一種迴圈結構,特別適用於某個語句或一組命令需要執行指定次數的情況。我們還可以在 bash 提示符和 Bash 指令碼中使用 for 迴圈。
Bash 指令碼提供了兩種用於編寫 for 迴圈的語法。第一個被稱為 C 風格或三表示式迴圈,它與 for 迴圈的 C 語言表述幾乎相同。
第二種表述是著名的 foreach 或 for-in 樣式構造,也已被許多流行的程式語言(如 PHP、Python、C#、C++11、Ruby 等)採用。
Bash C 風格 for 迴圈語法
這種風格使用 C 語言等三個表示式來指定迴圈迭代的次數。
for (( initialization; condition; increment/decrement ))
do
Shell command[s]
done
示例:假設我們要編寫一個指令碼,可以幫助我們列印一個包含任何使用者提供的數字的表格。我們可以使用以下程式碼來做到這一點。
#!/bin/bash
echo "Enter a Number: "
read number
for ((j=1;j<=10;j++))
do
echo "$number X $j = $((number*j))"
done
上面的程式碼從使用者那裡獲取一個數字並列印它的表,最多為 10。假設使用者輸入 5 作為數字,程式的輸出應為:
Enter a Number:
5
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
5 X 10 = 50
Bash Foreach/For-in 樣式語法
這種型別的 for 迴圈需要一個值/元素列表,併為列表中的每個元素執行一次迭代。該列表可以通過將每個專案分隔在一個空格中來提供,或者你可以指定一個範圍。
for Counter in 1 2 3 4 5 .. N
do
1st statement
2nd statement
nth statement
done
示例:列印 Hello World 五次。
#!/bin/bash
for c in 1 2 4 5 6
do
echo "$c Hello World"
done
輸出:
1 Hello World
2 Hello World
4 Hello World
5 Hello World
6 Hello World
請注意缺少的 3。由於迴圈僅針對列表中給定的專案數進行迭代,因此錯過了此數字。因此,變數 c 首先被賦予一個值 1,然後執行單次迭代。
之後,將 2 分配給 c,並執行第二次迭代。稍後,列表中的下一個值(即 4)被分配給 c,並且該過程繼續進行,直到整個列表完成。
for Item in File_0 File_1 File_N
do
Some Operations on Item
done
或者
for Item in $(Command)
do
Some Operations on Item
done
當命令與 for 迴圈一起使用時,Item 變數將被一個一個地分配給每個輸出標記。例如,以下指令碼將使用 for 迴圈列印當前目錄中以 f 開頭的所有檔案或資料夾。
#!/bin/bash
for Item in $(ls f*)
do
echo "$Item"
done
在 Bash for 迴圈中定義範圍和跳轉大小
如果你知道某些開始值和結束值之間沒有缺少數字。即使兩個連續值之間的差異(也稱為跳轉大小)大於 1,你也可以使用具有以下語法的 for 迴圈。
for i in {Start_Value..End_Value..Jump_Size}
do
Statement(s)
done
示例:列印 10 到 20 之間的所有偶數將需要 Start_Value=10、End_Value=20 和 Jump_Size=2。
#!/bin/bash
for evenNumber in {10..20..2}
do
echo "$evenNumber"
done
輸出:
10
12
14
16
18
20
在 Bash 提示符中製作 for 迴圈並解決分號 ; 的問題
這 ; 用於在單行上分隔或結束命令。還有其他分隔符,例如&。
然而,當 ; 用於終止命令,只有在上一條命令執行完畢後才執行下一條命令,也稱為同步執行。
假設你想在 bash 提示符的單行上編寫一個 for 迴圈,而不使用 newline 作為語句終止符,那麼你可以使用 Bash 參考手冊 中的以下語法。
for Item [ [in [List of Items] ] ; ] do commands; done
示例:下面的程式碼等價於我們之前列印偶數的指令碼。
#!/bin/bash
for even in {10..20..2} ; do echo "$even";done
do 關鍵字之後。因此,在 do 後面加上 ; 會產生一個語法錯誤。三表示式或 C 型別 for 迴圈的語法如下。
for (( Initilization ; Condition ; Increment/Decrement )) ; do commands ; done
例子:
#!/bin/bash
for ((i=10;i<20;i=i+2));do echo "$i"; done