linux bash for循环

linux

循环是编程语言的基本概念之一。当你想要一遍又一遍地运行一系列命令时,循环很方便就可以做到,直到达到某个条件终止

在诸如Bash之类的脚本语言中,循环对于自动执行重复性任务非常有用。

在Bash脚本中有3个基本的循环结构,for循环,while循环,unitl循环

在本教程中,我们将介绍Bash中for循环的基础知识以及用于改变循环流的break和continue语句。

Bash标准的for循环

for循环遍历列表并执行给定的命令。Bash for循环采用以下形式:

for item in [LIST]

do

[COMMANDS]

done

列表LIST可以是由空格分隔的一系列字符串,一系列数字,命令输出,数组等

循环遍历字符串

在下面的示例中,循环将遍历字符串列表中的每个单词,并且变量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}
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

Bash的C风格循环

C-style for循环的语法采用以下形式:

for ((INITIALIZATION; TEST; STEP))

do

[COMMANDS]

done

INITIALIZATION部分仅在循环开始时执行一次。然后,评估TEST部分。如果为假,则for循环终止。如果TEST为真,则执行for循环体内的命令并更新STEP部分

在下面的代码中,循环通过初始化i = 0,然后在每次迭代之前检查是否i ≤ 10。如果为true,则打印当前值i并将变量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语句在当前迭代项等于'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语句退出循环的当前迭代,并将程序控制传递给循环的下一次迭代。

在下面的示例中,我们迭代一系列数字,当迭代项$i等于'2'时,continue语句将导致执行返回到循环的开头并继续下一次迭代,即跳过2的打印

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 Loop示例

重命名文件名中包含空格的文件

下面的示例演示如何使用Bash 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边缘的所有文件的列表。
  • 第二行适用于列表中的每个项目,并将文件移动到一个用.jpg替换.jpeg的新文件。该部分${file%.jpeg}使用shell参数扩展从文件名中删除.jpeg部分。
  • done 表示循环段的结束

至此,您应该很好地理解如何使用bash for循环遍历列表。

以上是 linux bash for循环 的全部内容, 来源链接: utcz.com/z/506946.html

回到顶部