在 Bash 中实现 for 循环

Muhammad Husnain 2023年1月30日
  1. Bash for 循环
  2. Bash C 风格 for 循环语法
  3. Bash Foreach/For-in 样式语法
  4. 在 Bash for 循环中定义范围和跳转大小
  5. 在 Bash 提示符中制作 for 循环并解决分号 ; 的问题
在 Bash 中实现 for 循环

本教程将讨论编写 Bash for 循环的可用 Bash 脚本公式。

首先,我们将学习它的基本语法和概念。稍后,我们将在 Bash 脚本中学习它的不同类型,例如 C 风格的 for 循环表示法和 foreachfor-in 风格。

最后,我们将讨论分号 ; 的问题。在 bash 提示符中进行 for 循环时。

Bash for 循环

编程或脚本语言中的循环是一种迭代控制结构,用于重复执行一个语句或一组语句,直到不满足某个条件。

for 循环是一种循环结构,特别适用于某个语句或一组命令需要执行指定次数的情况。我们还可以在 bash 提示符和 Bash 脚本中使用 for 循环。

Bash 脚本提供了两种用于编写 for 循环的语法。第一个被称为 C 风格或三表达式循环,它与 for 循环的 C 语言表述几乎相同。

第二种表述是著名的 foreachfor-in 样式构造,也已被许多流行的编程语言(如 PHP、Python、C#、C++11、Ruby 等)采用。

Bash C 风格 for 循环语法

这种风格使用 C 语言等三个表达式来指定循环迭代的次数。

for (( initialization; condition; increment/decrement ))
do
	Shell command[s]
done

示例:假设我们要编写一个脚本,可以帮助我们打印一个包含任何用户提供的数字的表格。我们可以使用以下代码来做到这一点。

#!/bin/bash
echo "Enter a Number: "
read number

for ((j=1;j<=10;j++))
do  
   echo "$number X $j = $((number*j))"
done

上面的代码从用户那里获取一个数字并打印它的表,最多为 10。假设用户输入 5 作为数字,程序的输出应为:

Enter a Number:
5
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
5 X 10 = 50

Bash Foreach/For-in 样式语法

这种类型的 for 循环需要一个值/元素列表,并为列表中的每个元素执行一次迭代。该列表可以通过将每个项目分隔在一个空格中来提供,或者你可以指定一个范围。

for Counter in 1 2 3 4 5 .. N
do
	1st statement
	2nd statement
	nth statement
done

示例:打印 Hello World 五次。

#!/bin/bash
for c in 1 2 4 5 6 
do
   echo "$c Hello World"
done

输出:

1 Hello World
2 Hello World
4 Hello World
5 Hello World
6 Hello World

请注意缺少的 3。由于循环仅针对列表中给定的项目数进行迭代,因此错过了此数字。因此,变量 c 首先被赋予一个值 1,然后执行单次迭代。

之后,将 2 分配给 c,并执行第二次迭代。稍后,列表中的下一个值(即 4)被分配给 c,并且该过程继续进行,直到整个列表完成。

注意
以上列表中的项目可以是不同文件的名称。此外,它可能来自 bash 命令或数组,而不是空格分隔的项目。
for Item in File_0 File_1 File_N
do
	Some Operations on Item
done

或者

for Item in $(Command)
do
	Some Operations on Item    
done

当命令与 for 循环一起使用时,Item 变量将被一个一个地分配给每个输出标记。例如,以下脚本将使用 for 循环打印当前目录中以 f 开头的所有文件或文件夹。

#!/bin/bash
for Item in $(ls f*)
do
   echo "$Item"
done

在 Bash for 循环中定义范围和跳转大小

如果你知道某些开始值和结束值之间没有缺少数字。即使两个连续值之间的差异(也称为跳转大小)大于 1,你也可以使用具有以下语法的 for 循环。

for i in {Start_Value..End_Value..Jump_Size}
  do 
     Statement(s)
 done

示例:打印 10 到 20 之间的所有偶数将需要 Start_Value=10End_Value=20Jump_Size=2

#!/bin/bash
for evenNumber in {10..20..2}
  do 
     echo "$evenNumber"
 done

输出:

10
12
14
16
18
20

在 Bash 提示符中制作 for 循环并解决分号 ; 的问题

; 用于在单行上分隔或结束命令。还有其他分隔符,例如&

然而,当 ; 用于终止命令,只有在上一条命令执行完毕后才执行下一条命令,也称为同步执行。

假设你想在 bash 提示符的单行上编写一个 for 循环,而不使用 newline 作为语句终止符,那么你可以使用 Bash 参考手册 中的以下语法。

for Item [ [in [List of Items] ] ; ] do commands; done

示例:下面的代码等价于我们之前打印偶数的脚本。

#!/bin/bash
for even in {10..20..2} ; do echo "$even";done
注意
请注意,这些命令直接位于 do 关键字之后。因此,在 do 后面加上 ; 会产生一个语法错误。

三表达式或 C 类型 for 循环的语法如下。

for (( Initilization ; Condition ; Increment/Decrement )) ; do commands ; done

例子:

#!/bin/bash
for ((i=10;i<20;i=i+2));do echo "$i"; done
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

相关文章 - Bash Loop