bash For 循环

・8 分钟阅读

循环是编程语言的基本概念之一,如果要反复运行一系列命令,直到达到某个条件时,循环非常方便。

在Bash等脚本语言中,循环对于自动化重复性任务非常有用。

Bash脚本,for循环,while循环和中有三种基本的循环结构until循环。

在本教程中,在Bash中介绍for循环的基础知识,我们还将向你展示如何使用breakcontinue语句来改变循环的流程。

标准Bash for循环

for循环遍历项列表并执行给定的一组命令,

Bash 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 for循环

c样式的for循环的语法采用以下格式:


for ((INITIALIZATION; TEST; STEP))
do
 [COMMANDS]
done

当循环开始时,INITIALIZATION部分只执行一次,然后,计算TEST部分,如果是false,就循环终止,如果TEST为true,则执行for循环体内的命令,并且更新STEP部分。

在下面的示例代码中,通过初始化i =0以及在每次循环检查i ≤ 10之前循环星号,如果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

breakcontinue语句

breakcontinue语句可用于控制for循环执行。

break语句

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语句

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表示循环段的结束

更改文件扩展名

下面的示例演示如何使用Bash for循环,将中的文件扩展名替换为. jpeg中的重命名所有文件。


for file in *.jpeg; do
 mv -- "$file" "${file%.jpeg}.jpg"
done

逐行分析代码:

  • 第一行创建一个for循环,并遍历以 'jpeg' 结尾的所有文件的列表
  • 第二行应用于列表的每一项,并将文件移动到一个新行,用 'jpeg' 替换,${file%.jpeg}使用shell参数扩展
  • done表示循环段的结束

结束语

Bash for循环用于以固定的次数重复执行一组给定的命令。

如果你有问题或反馈,请留下评论。

讨论
Syq2803 profile image