Bash 'While' 循环:教程和示例

在 Bash 脚本中使用“while”循环来迭代命令。

Bash (Bourne Again Shell) 是 GNU/Linux 操作系统中的 shell 命令提示符和脚本语言。它是大多数 Linux 发行版的默认 shell。

像大多数脚本语言一样,Bash 提供循环语法来多次重复类似的任务。在本文中,我们将学习如何使用 尽管 在 Bash 中循环。

介绍

尽管 Bash 中的循环用于根据另一个命令(条件命令)的输出多次执行命令(已执行的命令)。执行的命令将继续运行,直到条件命令成功运行(即返回 0 状态。Linux 中的任何命令返回 0 表示成功,非零整数表示失败)。

如果有多个条件命令,则语句只考虑列表中最后一个命令的状态,即循环执行,直到列表中最后一个命令运行成功。

一般语法

的一般语法 尽管 Bash 中的循环是:

完成时

执行命令列表将继续运行,直到条件命令列表中的最后一个命令成功运行并以状态 0 退出。在迭代中,当最后一个条件命令失败时,循环退出。

用户可以在命令列表中指定任何可执行文件。它可以是标准 Linux 程序或自定义用户程序或脚本。每个命令都应该在一个新行上或在同一行上用分号分隔。

让我们看几个例子。

循环直到变量具有特定值: 以下循环执行直到变量的值 X 不等于 10。

x=0 而 [[ $x -ne 10 ]] 做 echo $x ((x++)) done

在每次迭代中,我们都会检查 x 的值是否为 10。正在使用 测试 命令。 [[ 表达 ]] 是测试命令的语法(见 男子测试)。在这里,因为我们正在使用 -ne 运算符(代表“不等于”),如果 x 的值不为 10,则测试命令返回 0,即成功,如果 x 的值为 10,则返回非零值,即失败。

然后在里面 做...完成 块,我们打印 x 的值并增加它。一旦 x 的值为 10,测试命令将返回非零状态,并退出循环。

笔记: 在 while 循环中使用的索引变量将在 while 循环之前或在条件命令中初始化,这与 for 循环相反,它允许隐式初始化变量。

使用多个条件命令: 以下循环创建 5 个名为的目录 dir0, dir1, ... dir4.

z=0 而 echo "文件列表:" ls -l [[ $z -ne 5 ]] do echo "Creating dir$z..." mkdir dir$z ((z++)) done

第一条命令 echo "文件列表:"ls -l 将完全执行一次;它们的成功或失败对循环运行的时间没有任何影响。

然后将执行用于检查变量 z 值的测试命令。直到 z 的值不为 5,测试命令返回成功状态,因此循环继续运行。条件命令和执行的命令保持按顺序运行。在这里,对于每次迭代,它将首先在条件下运行 echo 命令和 ls 命令,然后第三个条件命令检查 z 的值。如果不是 5,则进入循环并执行给定的命令。

中断并继续

有条件退出的 Break 语句

我们也可以使用条件语句 如果 循环内。这 如果 语句可以与 休息 语句,用于有条件地退出循环。

x=0 while [[ $x -ne 10 ]] do if [[ $x -eq 5 ]] break fi echo $x ((x++)) done

上面的while循环会打印0到4的数字,然后当i的值为5时,就会跳出循环。当命令给出特定输出时要退出循环时,这特别有用。

有条件地跳过迭代的继续语句

Bash 也有一个 继续 语句,如果满足特定条件,则跳过循环中迭代的剩余部分。

x=0 while [[ $x -ne 10 ]] do if [[ $x -eq 5 ]] continue fi echo $x ((x++)) done

上面的循环将打印从 0 到 10 的数字,除了 5,因为在迭代过程中 x=5 有一个 continue 语句,它将在迭代开始时跳过循环中的其余代码 x=6.

使用循环:脚本和命令行

循环语法可以直接在 Bash shell 中使用,也可以从可执行的 shell 脚本文件中使用。如同 为了尽管 循环,一次 尽管 在 shell 上输入 loop 语法,shell 会继续提示让用户继续执行要循环的命令。

否则,用户可以将其保存在脚本文件中并执行该脚本文件。

#!/bin/bash 在开始指定执行文件时要使用的解释器。尽管 Bash 是当今最常用的 shell,但有些用户确实更喜欢 shell,例如 zsh,应该在此文件的开头指定它来代替 bash。

授予执行权限 对于这个文件,运行:

chmod +x 测试.sh

最后, 执行文件, 跑:

./test.sh

结论

尽管 循环,类似于 为了直到 循环是 Bash 脚本中的一个重要特性。 While 循环与直到循环的用途类似,不同之处在于它用于在特定程序成功时运行备用命令/程序。这通常在高级网络脚本、系统维护脚本等中很有用。