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