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