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 5,for 迴圈將自動退出。
#!/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 的值增加 1。x 現在變成 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
