讲解一下Bash 中的 for 循环

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

在诸如 Bash 之类的脚本语言中,循环对于自动执行重复性任务非常有用。在 Bash 脚本中有3个基本的循环结构,for 循环, while 循环,until 循环。

标准 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}
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-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 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 语句终止当前循环并将程序控制传递给终止语句后面的语句。它通常用于在满足某个条件时终止循环。

在下面的示例中,一旦当前迭代项等于 ‘Lithium’ ,循环的执行将终止。

for element in Hydrogen Helium Lithium Beryllium; do
 if [[ "$element" == 'Lithium' ]]; then
   break
 fi
 echo "Element: $element"doneecho '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 循环示例

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

下面的示例演示如何使用 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 表示循环段的结束。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/219545.html<

(0)
管理的头像管理
上一篇2025-04-14 04:05
下一篇 2025-04-14 04:06

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注