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
