Bash 中的 For 迴圈

Fumbani Banda 2023年1月30日 2022年5月11日
  1. Bash 中的 for 迴圈
  2. 在 Bash 中使用 for 迴圈的示例
  3. Bash 的 for 迴圈中帶有 break 的條件退出
  4. for 迴圈替換命令
Bash 中的 For 迴圈

本教程解釋瞭如何在 Bash 指令碼中使用範圍表示法和三表示式表示法中的 for 迴圈,就像在 C 程式語言中一樣。

Bash 中的 for 迴圈

for 迴圈是用於重複執行命令的 Bash 語句。Bash 中的 for 迴圈使用兩個主要符號。這兩個符號如下所示。

第一種表示法使用具有定義範圍的 for 迴圈。在下面的語法中,範圍的端點是 n。這意味著 for 迴圈將在它停止之前執行其中的命令 n 次。

for variable in 1 2 3 ... n
do
    command1
    command2
done

第二種表示法使用帶有三表示式的 for 迴圈,就像在 C 程式語言中一樣。exp1 是初始化,exp2 是條件,exp3 是增量。

for ((exp1; exp2; exp3))
do 
    command1 
    command2 
done

在 Bash 中使用 for 迴圈的示例

下面的指令碼演示了在 Bash 指令碼中使用 for 迴圈。

該指令碼第一次將變數 i 的值設定為 1,並列印 line number 1。然後它返回到 for 迴圈,將變數 i 設定為 2,並列印 line number 2

指令碼反覆執行此操作,更改 i 的值,直到到達最後一個數字 5。一旦列印 line number 5for 迴圈將自動退出。

#!/bin/bash
for i in 1 2 3 4 5
do
    printf "line number $i"
    printf "\n"
done

執行上面的指令碼會將以下輸出列印到標準輸出。

line number 1
line number 2
line number 3
line number 4
line number 5

下面的指令碼使用花括號來定義 for 迴圈迭代的範圍。花括號內的數字按順序遞增。

第一次,i 的值設定為 1。該指令碼然後在 for 迴圈內執行兩個 printf 命令。i 的值加 1,變為 2,然後執行 for 迴圈內的 printf 命令。

i 的值不斷增加,直到最終變為 5,一旦執行了兩個 printf 命令,for 迴圈會自動終止。

!/bin/bash
for i in {1..5}
do
    printf "Hello World $i"
    printf "\n"
done

以下是執行指令碼後列印出來的輸出。

Hello World 1
Hello World 2
Hello World 3
Hello World 4
Hello World 5

下面,指令碼使用 C 程式語言中的三表示式表示法。在第一個表示式中,x 被初始化為 0。第二個表示式有條件測試,檢查 x 是否小於或等於 max 變數的值。

max 變數的值已設定為 5。最後一個表示式將 x 的值增加 1

第一次,x 的值為 0,並且條件返回真,因為 0 小於或等於 5。然後 for 迴圈將 number: 0 列印到終端,x 的值增加 1x 現在變成 1

1 是否小於或等於 5 也會被測試,它返回 true,並且 for 迴圈列印 number: 1。這個過程不斷重複,直到條件返回 false 並且 for 迴圈退出。

#!/bin/bash
max=5
printf "Print Numbers from 0 to $max\n"
for ((x=0;x<=max;x++)); do
    printf "number: $x\n"
done

下面是執行指令碼後列印到終端的輸出。

Print Numbers from 0 to 5
number: 0
number: 1
number: 2
number: 3
number: 4
number: 5

Bash 的 for 迴圈中帶有 break 的條件退出

下面的指令碼演示了使用 break 關鍵字退出 for 迴圈。如果 x 變數的值小於或等於 max 變數的值,for 迴圈被設定為迭代。然而,for 迴圈中有一個 test 命令。

test 命令檢查 x 變數的值是否等於 3;如果此測試返回 true,則指令碼遇到 break 關鍵字,並退出 for 迴圈。

#!/bin/bash
max=5
printf "Print Numbers from 0 to $max\n"
printf "Program will exit when we hit 3\n"

for ((x=0;x<=max;x++)); do
    printf "number: $x\n"
    if [ $x  -eq  3 ]
    then
        break
    fi
done

以下是指令碼執行時顯示到標準終端的輸出。當 x 的值等於 3 時存在 for 迴圈,因為 for 迴圈內的 test 命令在 x 變數的值設定為 3 時計算算術表示式,它返回 true。然後指令碼在 if 語句中遇到 break 關鍵字並退出。

Print Numbers from 0 to 5
Program will exit when we hit 3
number: 0
number: 1
number: 2
number: 3

for 迴圈替換命令

下面的指令碼顯示了使用帶有命令替換的 for 迴圈。命令替換是 Bash 的一項功能,它允許我們執行 Linux 命令並將命令的輸出儲存在 Bash 變數中。使用此功能執行命令後,該命令的標準輸出將替換該命令。

在指令碼中,cat 命令使用命令替換來執行。cat file1.txt 的輸出替換了命令,for 迴圈遍歷命令的輸出並使用 printf 命令將其列印到標準輸出。

#!/bin/bash
printf "Program prints the lines of a file\n\n"

for line in $(cat file1.txt)
do
     printf "$line"
     printf "\n"
done

該指令碼在執行時會產生以下輸出。檔案 file1.txt 包含列印到標準終端的三種語言的列表。

Program prints the lines of a file

French
English
Spanish
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

相關文章 - Bash Loop