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