在 Bash 中實現 for 迴圈

Muhammad Husnain 2023年1月30日 2022年5月11日
  1. Bash for 迴圈
  2. Bash C 風格 for 迴圈語法
  3. Bash Foreach/For-in 樣式語法
  4. 在 Bash for 迴圈中定義範圍和跳轉大小
  5. 在 Bash 提示符中製作 for 迴圈並解決分號 ; 的問題
在 Bash 中實現 for 迴圈

本教程將討論編寫 Bash for 迴圈的可用 Bash 指令碼公式。

首先,我們將學習它的基本語法和概念。稍後,我們將在 Bash 指令碼中學習它的不同型別,例如 C 風格的 for 迴圈表示法和 foreachfor-in 風格。

最後,我們將討論分號 ; 的問題。在 bash 提示符中進行 for 迴圈時。

Bash for 迴圈

程式設計或指令碼語言中的迴圈是一種迭代控制結構,用於重複執行一個語句或一組語句,直到不滿足某個條件。

for 迴圈是一種迴圈結構,特別適用於某個語句或一組命令需要執行指定次數的情況。我們還可以在 bash 提示符和 Bash 指令碼中使用 for 迴圈。

Bash 指令碼提供了兩種用於編寫 for 迴圈的語法。第一個被稱為 C 風格或三表示式迴圈,它與 for 迴圈的 C 語言表述幾乎相同。

第二種表述是著名的 foreachfor-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=10End_Value=20Jump_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
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

相關文章 - Bash Loop