37. 使用类似 C 语法的 for 循环


bash for 循环的第二种形式类似于 "C" 编程语言的 for 循环,它具有三个表达式(初始化、条件和更新)。

for (( expr1; expr2; expr3 ))
do
    commands
done

  • 在第一次迭代之前,对 expr1 进行求值。 这通常用于初始化循环的变量。
  • 只要 expr2 的值为 TRUEdodone 之间的所有语句都会重复执行。
  • 每次循环迭代后,都会计算 expr3。 这通常用于增加循环计数器。

以下示例展示了如何在 bash for 循环中使用此语法

使用 bash C 风格的 for 循环生成并显示 5 个随机数:

$ cat for10.sh
for (( i=1; i <= 5; i++ ))
do
    echo "Random number $i: $RANDOM"
done

$ ./for10.sh
Random number 1: 23320
Random number 2: 5070
Random number 3: 15202
Random number 4: 23861
Random number 5: 23435

当您在 C 风格的 for 循环中不提供开始、条件和增量时,它将永远执行。 您需要按 Ctrl-C 来停止循环。

$ cat for11.sh
i=1;
for (( ; ; ))
do
 sleep $i
 echo "Number: $((i++))"
done

注意:不要忘记您需要按 Ctrl-C 才能退出此示例:
$ ./for11.sh
Number: 1
Number: 2
Number: 3

在 bash C 风格循环中,除了增加条件中使用的值之外,您还可以增加一些其他值或执行一些其他操作。 在 C 风格 for 循环的初始化部分和增量部分中,您可以使用用逗号分隔的多个语句。 本例使用 i 进行控制,并分别操作 j

$ cat for12.sh
for ((i=1, j=10; i <= 5 ; i++, j=j+5))
do
    echo "Number $i: $j"
done

$ ./for12.sh
Number 1: 10
Number 2: 15
Number 3: 20
Number 4: 25
Number 5: 30