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,並且該過程繼續進行,直到整個列表完成。

注意
以上列表中的專案可以是不同檔案的名稱。此外,它可能來自 bash 命令或陣列,而不是空格分隔的專案。
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