在之前的 shell 脚本 101s 中,我们介绍了 数组 和 变量 在 shell 脚本中。 在本教程中,我们将介绍 shell脚本中的while循环.
shell脚本中的while循环用于多次重复指令,直到循环的条件保持为真。 循环在现实世界的应用程序中有很多用例,因为我们创建循环是为了自动执行重复性任务。 让我们回顾一些用例并学习在 shell 脚本中使用 while 循环。
Shell 脚本中 While 循环的语法
while 循环根据提供给它的条件工作。 它可以像等待一个变量等于指定的数字一样简单,也可以像等待另一个命令的输出与我们指定的输出一样复杂。 这里的可能性是无穷无尽的。 如果您可以将某事评估为 TRUE 或 FALSE,则可以将其用作 while 循环的条件。
while [condition - should evaluate to TRUE or FALSE] do command command done
这就是典型的 while 循环的样子。
使用 Shell 脚本时的布尔运算符
除了您在其他编程语言中看到的布尔运算符之外,包括 ==, , =, 等等,这些是特定于 shell 脚本的运算符。 主要的用法差异是这些运算符将 仅在数值时有效 提供。 使用字符串值,操作将简单地失败。
操作员 | 描述 | 例子 |
---|---|---|
-出生 | 检查两个操作数是否不相等 | [ 1 -ne 2 ] 是真的 |
–情商 | 检查两个操作数是否相等 | [ 1 -eq 2 ] 是假的 |
–lt | 检查左操作数是否小于右操作数 | [1-lt 2 ] 是真的 |
–gt | 检查左操作数是否大于右操作数 | [1-gt 2 ] 是假的 |
–这 | 检查左操作数是否小于或等于右操作数。 | [1-le 2 ] 是真的 |
–给 | 检查左操作数是否大于或等于右操作数。 | [1-ge 2 ] 是假的 |
在 Shell 脚本中创建 While 循环
默认情况下,while 循环没有重复限制。 我们必须明确地为它提供一个条件,在代码执行期间的某个时刻,它会变为 false。 否则,除非发送中断信号,否则您将有一个不会结束的循环。
i=0 while [ $i -le 10 ] do echo True ((i++)) done echo False
Save 上面的脚本可以使用任何名称 .sh 延期。 要运行该文件,您可以使用 bash 命令之类的 bash .sh 或使用 chmod 命令使文件可执行。 要使脚本可执行,请运行 chmod +x .sh 接着 ./.sh 将允许您运行脚本。
让我们逐行理解脚本。
- 我=0 – 这里我们将变量 $i 设置为 0。在我们之前的教程中了解有关变量的更多信息
- 尽管 [ $i -le 10 ] – 只运行 while 循环,直到变量 $i 小于或等于 10。所以这个循环将运行 11 次,包括第零次运行。
- 做 – 在 shell 脚本中标记 while 循环的开始
- 回声真 – 一个简单的命令,将在我们的终端上打印单词“True”
- ((i++)) – C 风格变量递增到 加 1 每个循环到变量 i 。 执行增量还有多种其他方法,包括 $i=((i+1))、((i=i+1)) 等。随意使用其中一种。
- 完毕 – 标记 while 循环的结束
- 回声假 – 这再次简单地在屏幕上打印出单词 False 以指示条件现在变为错误。
您将收到类似于下面屏幕截图中的输出。
Shell 脚本中的无限 While 循环
现在我们已经知道如何添加一个条件来终止 while 循环,让我们看看如何处理无限 while 循环。 我们唯一要做的就是跳过条件部分。
i=0 while : do echo Script ran $i times ((i++)) done echo False
Save 这个脚本在另一个文件中 .sh 延期。 您可以按照与上述相同的步骤执行 shell 脚本。 脚本运行后,在不到 1 秒的时间内,您应该会获得 100 次数千次的输出。
要停止脚本,请按 Ctrl + C.
您必须向上滚动才能看到您从哪里开始,因为循环运行得非常快。
结论
这是一个足够简单的循环,目前不需要详细介绍。 随着我们继续讨论主题,我们将继续在一致的基础上使用 while 循环。 进行更详细的操作,包括读取文件、评估更多条件等。当您学习 shell 脚本 101 教程时,您将在每个教程中学习一个主题。 在转到下一个主题之前,请确保您进行了足够的练习以确保您精通并有良好的动手能力。 在本教程中,我们介绍了 shell 脚本中的 while 循环及其用法。
参考:
https://www.gnu.org/software/gawk/manual/html_node/While-Statement.html