重击循环
循环是编程语言的基本概念之一。 当您要一遍又一遍地运行一系列命令直到达到特定条件时,循环很方便。
在Bash等脚本语言中,循环对于自动执行重复任务非常有用。
Bash脚本中有三种基本的循环构造, for
循环, while
循环和 until
循环。
在本教程中,我们将介绍Bash中for循环的基础。 我们还将向您展示如何使用 break
和 continue
语句来改变循环流。
标准重击 for
循环号
的 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
在数字范围内循环
您可以使用序列表达式通过定义范围的起点和终点来指定数字或字符的范围。 序列表达式采用以下形式:
{START..END}
这是循环遍历从0到3的所有数字的示例循环:
for i in {0..3}
do
echo "Number: $i"
done
Number: 0
Number: 1
Number: 2
Number: 3
从Bash 4开始,使用范围时也可以指定增量。 该表达式采用以下形式:
{START..END..INCREMENT}
这是显示如何增加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
C样式的语法 for
循环采用以下形式:
for ((INITIALIZATION; TEST; STEP))
do
[COMMANDS]
done
的 INITIALIZATION
循环开始时,零件仅执行一次。 然后, TEST
零件被评估。 如果为假,则循环终止。 如果 TEST
是真的,在体内的命令 for
循环被执行,并且 STEP
零件已更新。
在下面的示例代码中,循环通过初始化来开始 i = 0
,并在每次迭代前检查是否 i ≤ 10
。 如果为true,则显示的当前值 i
和 [increments the variable] i
乘以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
和 continue
声明#
的 break
和 continue
语句可用于控制for循环的执行。
break
声明编号
的 break
语句终止当前循环,并将程序控制权传递给终止语句之后的语句。 当满足特定条件时,通常用于终止循环。
在以下示例中,我们使用 if
语句,以在当前迭代项等于“锂”时终止循环的执行。
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
声明编号
的 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
重击 for
循环示例
重命名文件名中带有空格的文件
以下示例显示如何通过将空格替换为下划线来重命名当前目录中的所有文件,并在名称中使用空格。
for file in * *; do
mv "$file" "${file// /_}"
done
让我们逐行分解代码:
- 第一行创建一个
for
循环并遍历所有文件列表,其名称中带有空格。 表达方式* *
创建列表。 - 第二行适用于列表的每一项,并将文件移至新文件,并用下划线(
_
)。 那个部分${file// /_}
正在使用shell参数扩展用字符串替换参数中的模式。 done
指示循环段的结尾。
更改文件扩展名
以下示例显示了如何使用Bash for
循环以将文件扩展名从.jpeg替换为.jpg,重命名当前目录中所有以.jpeg结尾的文件。
for file in *.jpeg; do
mv -- "$file" "${file%.jpeg}.jpg"
done
让我们逐行分析代码:
- 第一行创建一个
for
循环并遍历以’.jpeg’结尾的所有文件的列表。 - 第二行适用于列表的每个项目,并将文件移至新文件,将“ .jpeg”替换为“ .jpg”。
${file%.jpeg}
使用shell参数扩展从文件名中删除“ .jpeg”部分 done
指示循环段的结尾。
结论#
重击 for
循环用于以固定次数重复执行给定的一组命令。
如果您有任何疑问或反馈,请随时发表评论。
bash循环终端