Bash 脚本 – For 循环
由于 BASH 是一种命令行语言,我们获得了一些功能丰富的经验来利用编程技能在终端中执行任务。我们可以在 BASH 脚本中使用循环和条件语句,以简单的编程方式执行一些重复性和棘手的问题。在本文中,我们将重点关注 BASH 脚本中的for 循环。
根据用例和它试图自动化的问题,有几种方法可以使用 for 循环。
- 简单的 For 循环
- 基于范围的 for 循环
- 循环的数组迭代
- C 风格的 for 循环
- 无限循环
简单的 For 循环
要执行 for 循环,我们可以编写以下语法:
#!/bin/usr/env bash
for n in a b c;
do
echo $n
done
上面的命令会一一遍历in关键字后面的指定元素。元素可以是数字、字符串或其他形式的数据。
基于范围的 for 循环
我们可以使用基于范围的 for 循环。在这种类型的循环中,我们可以在语句中的每次迭代(可选)中指定开始、停止和递增的次数。有两种方法可以做到这一点,即通过提及递增/递减值和默认递增一。语法如下所示:
#!/bin/usr/env bash
for n in {1..5};
do
echo $n
done
在上面的代码中,我们使用“{}”来指定一个数字范围。在花括号内,我们指定了起点,后跟两个点和一个终点。默认情况下,它递增一。因此,我们打印从 1 到 5 的 5 个数字(包括 1 到 5)。
#!/bin/usr/env bash
for n in {1..5..2};
do
echo $n
done
在这里,我们可以看到循环增加了 2 个单位,如花括号中所述。因此,这使得处理数字变得非常容易和方便。这也可以与字母字符一起使用。
注意:我们不能在花括号内使用变量,因此我们必须对值进行硬编码。要使用变量,我们将在接下来的几节中看到传统的 C 风格的 for 循环。
循环的数组迭代
我们可以在 bash 中使用具有特定语法的 for 循环方便地迭代数组。我们可以使用 BASH 中的特殊变量,即 @ 来访问数组中的所有元素。让我们看一下代码:
#!/bin/usr/env bash
s=("football" "cricket" "hockey")
for n in ${s[@]};
do
echo $n
done
我们可以使用获取数组中所有元素的 @运算符来遍历数组元素。因此,使用 for 循环,我们一一迭代它们。我们使用变量 ${variable_name[@]} ,这里的花括号扩展了变量“s”的值,这里是一个字符串数组。使用 [@]运算符,我们访问所有元素,从而在 for 循环中迭代它们。这里,“ n ”是迭代器,因此我们可以打印该值或对其进行所需的处理。
C 风格的 for 循环
如前所述,我们需要使用 for 循环中的变量来迭代一系列元素。因此,C 风格的 for 循环起着非常重要的作用。让我们看看我们如何使用它们。
#!/bin/usr/env bash
n=7
for (( i=1 ; i<=$n ; i++ ));
do
echo $i
done
正如我们所见,我们可以动态地使用结束条件范围的值。请记住,双括号之间的空格可能是有意的,并且是语法的一部分。 C 风格的 for 循环是具有 3 个部分的循环,即初始化迭代器、增量器/减量器和结束条件。
在上面的语法中,我们已经将循环迭代器/计数器初始化为 1,可以根据选择任意设置。第二部分是结束条件,这里我们使用了在 for 循环之前初始化的变量“n” ,因此我们使用简单的$运算符来获取变量的值。最后,我们有增量器/减量器,它将迭代器/计数器更改为可以是任何值,但在示例中,我们使用一元运算运算符(++)将值加一,相当于“i=i +1” 。因此,我们可以使用i+=2、i-、++i等语句。
无限循环
我们不经常使用它,但有时让某些事情正常工作很有用。语法非常简单,类似于 C 风格的 for 循环。
#!/bin/usr/env bash
n=4
for (( ; ; ));
do
if [ $n -eq 9 ];then
break
fi
echo $n
((n=n+1))
done
正如我们所看到的,for 循环没有条件,并且这个循环永远循环,但是我们有一个条件语句来检查它不会永远持续下去。我们在 if 语句中使用了 break 语句,以便跳出循环并停止使用迭代器进行迭代。我们已经使用增量器来增加循环中的变量,否则循环是无限的。当然,我们需要一些逻辑来跳出循环,这就是为什么我们需要使用 if 条件语句。