Bash 中的 For 循环

Fumbani Banda 2023年1月30日
  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
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