Bash 基础知识系列 #8:For、While 和 Until 循环
创始人
2024-03-02 16:51:17
0

在 Bash 基础知识系列的倒数第二章节,学习 forwhileuntil 循环。

循环是任何编程语言中的一个强大功能。如果你还不知道,循环其实是一种根据某些条件重复代码的方式。

例如,想象一下你需要打印从 1 到 10 的数字。你可以使用 echo 命令写十次,但那太原始了。你使用一个循环,在 3 到 4 行代码内,就能完成。

这是我能想到的最简单的例子。我将在讨论 Bash 循环时,分享一些实际有用的例子。

在 Bash 中有三种类型的循环:

  • for
  • while
  • until

我将在教程中展示所有三种类型的循环。让我们从最常见的一种开始。

Bash 中的 For 循环

以下是 Bash 中的 for 循环语法:

for arg in LIST; do
    commands
done

这里的 LIST 可能是一个数组或者一个项目列表。括号扩展 也是进行循环的常用手段。

考虑一下我在开始提到的最简单的场景。让我们使用 for 循环打印从 1 到 10 的数字:

#!/bin/bash

for num in {1..10}; do
    echo $num
done

如果你运行它,你应该会看到像这样的输出:

$ ./for-loop.sh
1
2
3
4
5
6
7
8
9
10

你也可以使用 for num in 1 2 3 4 5 6 7 8 9 10; do ,但是使用括号扩展使得代码看起来更短且更智能。

{..} 是用于扩展模式的。你使用 {d..h} ,它等同于 d e f g h 。关于括号扩展的更多信息,可以在这篇文章中找到。

在 Bash 中使用括号扩展

? 如果你熟悉 C 语言编程,你可能会喜欢在 bash 中使用 C 风格的 for 循环:

for ((i = 0 ; i < 10 ; i++)); do
  echo $i
done

让我们看另一个例子,显示 Bash 数组 的所有内容:

#!/bin/bash

distros=(Ubuntu Fedora Debian Alpine)

for i in "${distros[@]}"; do
    echo $i
done

如果你运行脚本,它将显示数组中定义的所有发行版:

Ubuntu
Fedora
Debian
Alpine

Bash 中的 While 循环

while 循环测试一个条件,然后只要条件为真,就继续循环。

while [ condition ]; do
    commands
done

如果你考虑前一个例子,它可以使用 while 循环进行重写:

#!/bin/bash

num=1
while [ $num -le 10 ]; do
    echo $num
    num=$(($num+1))
done

如你所见,你首先需要将变量 num 定义为 1,然后在循环体内,你增加 num 的值。只要 num 小于或等于 10,while 循环就会检查条件并运行脚本。

因此,现在运行脚本将会显示出和之前 for 循环中看到的完全相同的结果。

1
2
3
4
5
6
7
8
9
10

让我们看另一个例子。这是一个 Bash 脚本,它接受一个数字作为参数 并显示该表。

#!/bin/bash

echo "Table for $1 is:"
index=1
while [ $index -le 10 ]; do
    echo $(($1*$index))
    index=$(($index+1))
done

如果你对 $1 的使用感到困惑,它代表传递给脚本的第一个参数。更多的细节可以参考这个系列的 第三章

如果你运行这个脚本,它应该会显示以下的输出:

$ ./table.sh 2
Table for 2 is:
2
4
6
8
10
12
14
16
18
20

Bash 中的 Until 循环

这是一个使用较少的循环格式。它的行为和 while 循环类似。这里的区别是,循环运行直到它检查的条件为真为止。意味着为了在循环中执行代码,[ ] 中的条件必须为假。

我马上会解释一下。让我们先看一下它的语法。

until [ condition ]; do
    commands
done

现在,如果我要使用相同的示例,即使用 until 循环打印从 1 到 10 的数字,它看起来会是这样:

#!/bin/bash

num=1
until [ $num -gt 10 ]; do
    echo $num
    num=$(($num+1))
done

区别在于条件;其余部分保持不变。

  • 当变量 num 小于或等于 10 时,while 循环就会运行。[ ] 中的条件必须为真,循环才会执行。
  • 知道变量 num 变得大于 10 时,until 循环才会运行。[ ] 中的条件必须为假,循环才会执行。

这都是做同样事情的两种不同方式。while 更受欢迎,因为你会在大多数编程语言中找到类似 while 的循环语法。

?️ 练习时间

那是有趣的。现在是做一些练习的时候了。

练习 1:编写一个脚本,该脚本接受一个数字作为参数并打印其表格。如果脚本在没有参数的情况下运行,你的脚本还应显示一个消息。

预期输出

$: ./table.sh
You forgot to enter a number

$: ./table.sh 3
3
6
9
12
15
18
21
24
27
30

练习 2 : 编写一个脚本,列出目录 /var 中的所有文件。

提示 : 对于循环,使用 /var/* 作为 “列表”。

Bash 基础知识系列即将结束。作为该系列的最后一章,你将在下周学习在 Bash 脚本中使用函数。敬请期待。

(题图:MJ/945241d6-6a73-432c-9bcd-e0948b3fadc0)


via: https://itsfoss.com/bash-loops/

作者:Abhishek Prakash 选题:lujun9972 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

编写CentOS系统下的B...
面对重复繁琐的服务器操作,手动输入命令效率低下且易出错。为了解决这...
2025-06-15 08:43:24
怎么用AI做短视频赚钱?小...
嘿,你是不是也刷到过那些爆火的短视频,心想:“这玩意儿咋这么赚钱?...
2025-06-06 22:12:18
Hadoop集群---方便...
目录 为什么编写脚本? myhadoop.sh 群...
2025-05-31 15:38:00
如何防止xss跨站脚本攻击...
XSS(跨站脚本)攻击是一种常见的网络...
2025-05-30 17:35:21
shell命令如何正确调用...
前言 本文是该专栏的第20篇,后面会持续分享python的各种干...
2025-05-29 06:53:20
CentOS系统下wc命令...
CentOS中的文本统计利器:命令详解与应用 在CentOS系统的...
2025-05-29 06:11:07

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...