循环是编程语言的基本概念之一。当您想要一遍又一遍地运行一系列命令直到达到特定条件时,循环会很方便。
在 Bash 等脚本语言中,循环对于自动执行重复任务非常有用。
Bash 脚本中有三种基本的循环结构,for
loop, while 循环
, and 直到循环
.
在本教程中,我们将介绍 Bash 中 for 循环的基础知识。我们还将向您展示如何使用break
and continue
语句来改变循环的流程。
标准狂欢for
Loop #
The for
循环遍历项目列表并执行给定的命令集。
狂欢for
循环采用以下形式:
for item in [LIST]
do
[COMMANDS]
done
该列表可以是一系列由空格分隔的字符串、数字范围、命令的输出、数组等。
循环字符串#
在下面的示例中,循环将迭代字符串列表中的每个项目以及变量element
将被设置为当前项目:
for element in Hydrogen Helium Lithium Beryllium
do
echo "Element: $element"
done
该循环将产生以下输出:
Element: Hydrogen
Element: Helium
Element: Lithium
Element: Beryllium
循环一个数字范围#
您可以使用序列表达式指定一个范围通过定义范围的起点和终点来表示数字或字符。序列表达式采用以下形式:
下面是一个迭代 0 到 3 之间所有数字的示例循环:
for i in {0..3}
do
echo "Number: $i"
done
Number: 0
Number: 1
Number: 2
Number: 3
从 Bash 4 开始,使用范围时也可以指定增量。该表达式采用以下形式:
下面的示例展示了如何递增 5:
for i in {0..20..5}
do
echo "Number: $i"
done
Number: 0
Number: 5
Number: 10
Number: 15
Number: 20
循环数组元素#
您还可以使用for
循环遍历元素数组。
在下面的示例中,我们定义了一个名为BOOKS
并迭代数组的每个元素。
BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby')
for book in "${BOOKS[@]}"; do
echo "Book: $book"
done
Book: In Search of Lost Time
Book: Don Quixote
Book: Ulysses
Book: The Great Gatsby
C 风格的 Bash for 循环#
C 风格的语法for
循环采用以下形式:
for ((INITIALIZATION; TEST; STEP))
do
[COMMANDS]
done
The INITIALIZATION
循环开始时,部分仅执行一次。然后,TEST
部分进行评估。如果为假,则循环终止。如果TEST
是真的,体内的命令for
循环被执行,并且STEP
部分已更新。
在下面的示例代码中,循环通过初始化开始i = 0
,并且在每次迭代之前检查是否i ≤ 10
。如果是真的的话prints当前值i
和[增加变量]i
by 1 (i++
) 否则循环终止。
for ((i = 0 ; i <= 1000 ; i++)); do
echo "Counter: $i"
done
该循环将迭代 1001 次并产生以下输出:
Counter: 0
Counter: 1
Counter: 2
...
Counter: 998
Counter: 999
Counter: 1000
break
and continue
声明#
The 中断和继续语句可以用来控制for循环的执行。
break
陈述#
The break
语句终止当前循环并将程序控制传递给终止语句后面的语句。它通常用于在满足某个条件时终止循环。
在下面的示例中,我们使用if 语句一旦当前迭代项等于“Lithium”,就终止循环的执行。
for element in Hydrogen Helium Lithium Beryllium; do
if [[ "$element" == 'Lithium' ]]; then
break
fi
echo "Element: $element"
done
echo 'All Done!'
Element: Hydrogen
Element: Helium
All Done!
continue
陈述#
The continue
语句退出循环的当前迭代并将程序控制传递给循环的下一次迭代。
在下面的示例中,我们将迭代一系列数字。当当前迭代项等于‘2’时,continue
语句将导致执行返回到循环的开头并继续下一次迭代:
for i in {1..5}; do
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
Number: 1
Number: 3
Number: 4
Number: 5
Bash for
循环示例#
重命名文件名中包含空格的文件#
以下示例显示如何通过将空格替换为下划线来重命名当前目录中名称中包含空格的所有文件:
for file in *\ *; do
mv "$file" "${file// /_}"
done
让我们逐行分解代码:
- 第一行创建一个
for
循环并迭代名称中包含空格的所有文件的列表。表达方式*\ *
创建列表。
- 第二行适用于列表中的每一项,并将文件移动到新文件,用下划线替换空格 (
_
)。那个部分${file// /_}
正在使用shell参数扩展用字符串替换参数中的模式。
-
done
表示循环段的结束。
更改文件扩展名#
以下示例展示了如何使用 Bashfor
循环到重命名所有文件通过将文件扩展名从 .jpeg 替换为 .jpg,在当前目录中以 .jpeg 结尾。
for file in *.jpeg; do
mv -- "$file" "${file%.jpeg}.jpg"
done
我们逐行分析一下代码:
- 第一行创建一个
for
循环并迭代以“.jpeg”结尾的所有文件的列表。
- 第二行适用于列表中的每一项,并将文件移动到新文件,将“.jpeg”替换为“.jpg”。
${file%.jpeg}
使用以下命令从文件名中删除“.jpeg”部分shell参数扩展
-
done
表示循环段的结束。
结论#
狂欢for
循环用于重复执行一组给定的命令固定次数。
如果您有任何问题或反馈,请随时发表评论。