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

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

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

介绍

典型的 Bash 脚本包含一系列要一个接一个执行的命令。变量可用于存储字符串、整数索引值、命令结果等。当用户想要多次执行特定命令时需要循环。当一个命令的输出采用列表的形式时,它特别有用,并且在每个结果上,在列表中,将运行第二个命令。

一般语法

的一般语法 为了 Bash 中的循环是:

因为在做……完成

在这里, 是一个 Bash 变量,它必须是一个有效的 Linux shell 变量名称,即名称包含字母 (az, AZ)、数字 (0-9) 和下划线 (_) 的组合,并且必须以字母或下划线。

是将循环的整数索引的自定义范围或整数或字符串的自定义列表。它也可以包含另一个 Linux 命令,但是,此类命令的输出必须以空格或换行符分隔,即 Bash 可解析为列表(Bash 中的列表基本上是由空格或换行符分隔的值的集合) )。

要执行的任何命令都必须放在 做..完成 堵塞。

让我们看几个简单的例子。

在一系列整数值上循环:以下代码创建名为 dir1、dir2、dir3 到 dir10 的目录。

for i in {1..10} do mkdir dir$i done

循环固定值列表: 以下代码打印给定固定列表中的每个字符串或整数。

因为我在你好 1 2 3 再见!做回声$我完成了

循环输出命令: 以下代码循环输出 ls 并以给定格式打印每个文件的名称。

for i in `ls` do echo "Filename is $i" done

基于表达式的语法

在 Bash 中也可以使用类似于 C 编程语言的基于表达式的语法:

for ((表达式 1; 表达式 2; 表达式 3)) do ... ... done

这里, 表达式 1 是索引变量的初始化。 表达式 2 是必须退出循环的条件;在每次迭代中检查此条件。 表达式 3 指定索引变量值的递增/递减/修改

以下示例仅打印 0 到 4 之间的值:

for ((i=0;i<5;i++)) do echo $i done

以下示例创建了一个无限循环,因为没有指定表达式:

for (( ; ; )) do echo "Press Ctrl-C to stop" done

中断并继续

有条件退出的 Break 语句

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

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then break else echo $i;完成

上面的循环会打印从0到4的数字。然后当i的值为5时,它会跳出循环。当命令给出特定输出时要退出循环时,这特别有用。例如,以下循环在找到空文件时中断。

for file in `ls` do flen=`wc -c $file` if [[ "$flen" = "0 $file" ]] then echo "$file is empty" break else echo $flen fi done 

命令 wc -c 打印文件中的行数 .它以格式打印 , 例如, 10 测试.txt.当行数为 0 时,即一个空文件,我们将跳出循环。

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

与 C 和许多其他编程语言类似,bash 也有一个 继续 语句,如果满足特定条件,则跳过循环中迭代的剩余部分。

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then continue fi echo $i;完毕

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

在下面的示例中,我们打印文件中的行数,并且特定的迭代将 继续 如果它是目录而不是文件。

for file in `ls` do if [[ -d $file ]] then continue fi wc -c "$file" done

[[ -d $文件]] 检查文件是否为目录。如果是,那么我们跳到下一个文件,即下一次迭代。如果它不是一个目录,我们使用打印文件中的行数 厕所 命令,如前所示。

使用循环:脚本和命令行

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

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

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

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

chmod +x 测试.sh

最后, 执行文件, 跑:

./test.sh

结论

为了 Bash 中的循环是一个非常简单的功能,但几乎可以用于所有类型的复杂脚本场景。无论您是普通用户还是高级 Linux 用户,还是开始学习系统管理和 DevOps 任务的自动化,学习它都会大有帮助。