在 Bash 中实现 for 循环
-
Bash
for
循环 -
Bash C 风格
for
循环语法 -
Bash
Foreach
/For-in
样式语法 -
在 Bash
for
循环中定义范围和跳转大小 -
在 Bash 提示符中制作
for
循环并解决分号;
的问题
本教程将讨论编写 Bash for
循环的可用 Bash 脚本公式。
首先,我们将学习它的基本语法和概念。稍后,我们将在 Bash 脚本中学习它的不同类型,例如 C 风格的 for
循环表示法和 foreach
或 for-in
风格。
最后,我们将讨论分号 ;
的问题。在 bash 提示符中进行 for
循环时。
Bash for
循环
编程或脚本语言中的循环是一种迭代控制结构,用于重复执行一个语句或一组语句,直到不满足某个条件。
for
循环是一种循环结构,特别适用于某个语句或一组命令需要执行指定次数的情况。我们还可以在 bash 提示符和 Bash 脚本中使用 for
循环。
Bash 脚本提供了两种用于编写 for
循环的语法。第一个被称为 C 风格或三表达式循环,它与 for
循环的 C 语言表述几乎相同。
第二种表述是著名的 foreach
或 for-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
,并且该过程继续进行,直到整个列表完成。
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=10
、End_Value=20
和 Jump_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
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