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

在 Bash 脚本中使用“直到”循环来循环命令。

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

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

介绍

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

如果有多个条件命令,该语句只考虑列表中最后一个命令的状态,即循环将运行直到列表中的最后一个命令不断失败。

一般语法

的一般语法 直到 Bash 中的循环是:

直到完成

执行命令列表将一直运行,直到条件命令列表中的最后一个命令失败。一旦最后一个命令成功,循环退出。

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

让我们看几个例子。

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

x=0 直到 [[ $x -eq 10 ]] 做 echo $x ((x++)) done

在每次迭代中,我们都会检查 x 的值是否为 10。正在使用 测试 命令。 [[ 表达 ]] 是测试命令的语法(见 男子测试).

然后在里面 做...完成 块,我们只是打印 x 的值,并增加它。一旦条件命令成功,即退出循环,即当 $x 等于 10.

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

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

z=0 直到 echo "Hi" echo "Bye" [[ $z -eq 5 ]] do echo "Creating dir$z..." mkdir dir$z ((z++)) done

第一个命令 echo “Hi” 和 echo “Bye” 将完全执行一次;它们的成功或失败对循环运行的时间没有任何影响。

然后将执行用于检查变量 z 值的测试命令。直到该命令一直失败,即直到 z 的值为 5,条件命令和执行的命令继续按顺序运行。在这里,对于每次迭代,它将首先在条件中运行 2 个 echo 命令,然后在第三个条件命令中检查 z 的值。如果不是 5,则进入循环并执行给定的命令。

中断并继续

有条件退出的 Break 语句

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

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

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

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

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

x=0 直到 [[ $x -eq 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 脚本中的另一个重要特性。当某些程序预期返回失败状态,并且要执行一些其他命令来记录失败、详细显示错误或只是执行一些替代程序时,它在复杂脚本中尤其重要。