Bash while 循环

2023-10-27

循环是编程语言的基本概念之一。当您想要多次运行一系列命令直到满足特定条件时,循环会很方便。

在 Bash 等脚本语言中,循环对于自动执行重复任务非常有用。 Bash 脚本中有三种基本的循环结构,for loop , while循环,并且直到循环 .

本教程涵盖了以下基础知识whileBash 中的循环。我们还将向您展示如何使用break and continue语句来改变循环的流程。

Bash while Loop #

The while循环用于执行给定命令集未知次数,只要给定条件计算结果为 true。

狂欢while循环采用以下形式:

while [CONDITION]
do
  [COMMANDS]
done

The while声明以while关键字,后跟条件表达式。

在执行命令之前评估条件。如果条件评估为 true,则执行命令。否则,如果条件计算结果为 false,则循环终止,程序控制将传递给后面的命令。

在下面的示例中,在每次迭代中,变量的当前值i被打印并且增加的 by one.

i=0

while [ $i -le 2 ]
do
  echo Number: $i
  ((i++))
done

Tue 循环迭代只要i小于或等于二。它将产生以下输出:

Number: 0
Number: 1
Number: 2

无穷while Loop #

无限循环是无限重复且永不终止的循环。如果条件始终为 true,则会出现无限循环。

在下面的示例中,我们使用内置命令:创建无限循环。:总是返回 true。您还可以使用true内置语句或任​​何其他始终返回 true 的语句。

while :
do
  echo "Press <CTRL+C> to exit."
  sleep 1
done

The while上面的循环将无限期地运行。您可以通过按终止循环CTRL+C.

这是一个等效的单行:

while :; do echo 'Press <CTRL+C> to exit.'; sleep 1; done

逐行读取文件#

最常见的用法之一while循环是逐行读取文件、数据流或变量。

这是一个读取以下内容的示例/etc/密码逐行文件并打印每一行:

file=/etc/passwd

while read -r line; do
  echo $line
done < "$file"

而不是控制while带条件循环,我们使用输入重定向(< "$file")将文件传递给read命令,控制循环。这while循环将运行直到读取最后一行。

逐行读取文件时,始终使用read-r防止反斜杠充当转义字符的选项。

默认情况下,read命令修剪前导/尾随空白字符(空格和制表符)。使用IFS=之前的选项read为了防止这种行为:

file=/etc/passwd

while IFS= read -r line; do
  echo $line
done < "$file"

break and continue声明#

The 中断和继续语句可以用来控制while循环的执行。

break陈述#

The break语句终止当前循环并将程序控制传递给终止循环后面的命令。它通常用于在满足某个条件时终止循环。

在下面的示例中,一旦当前迭代项等于2.

i=0

while [ $i -lt 5 ]
do
  echo "Number: $i"
  ((i++))
  if [[ "$i" == '2' ]]; then
    break
  fi
done

echo 'All Done!'
Number: 0
Number: 1
All Done!

continue陈述#

The continue语句退出循环的当前迭代并将程序控制传递给循环的下一次迭代。

在下面的例子中,一旦当前迭代项等于2 the continue语句将导致执行返回到循环的开头并继续下一次迭代。

i=0

while [ $i -lt 5 ]
do
  ((i++))
  if [[ "$i" == '2' ]]; then
    continue
  fi
  echo "Number: $i"
done

echo 'All Done!'
Number: 1
Number: 3
Number: 4
Number: 5
All Done!

结论#

The while只要条件为真,循环就会重复执行一组给定的命令。

如果您有任何问题或反馈,请随时发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash while 循环 的相关文章

  • 命令运行时从 shell_exec 命令获取输出

    我正在编写一个 PHP 脚本网页 该网页旨在接受先前上传到服务器的 JFFS2 图像的文件名 然后 该脚本将使用映像重新刷新服务器上的分区 并输出结果 我一直在用这个 tmp shell exec update flash v filena
  • 将 JSON 数组转换为 bash 数组并保留空格

    我想将 JSON 文件转换为 bash 字符串数组 稍后我可以对其进行迭代 我的JSON结构如下 USERID TMCCP CREATED DATE 31 01 2020 17 52 USERID TMCCP CREATED DATE 31
  • touch命令在一个目录下创建多个文件(不同名称)

    我想制作一个在 bash 中创建目录和文件结构的脚本 我尝试过这样的事情 mkdir p 1 2 touch 1 2 a b c a b c 应该是在一个命令或其他命令中创建的文件 但由于某种原因 结构是这样的 current folder
  • 将数组传递给函数名称冲突

    Specs GNU bash 版本 3 1 17 无法升级 Premise 我一直在摆弄数组 我想知道是否有任何方法可以让函数的本地变量与所述函数外部的数组同名 Example 在下面的示例中 我将尝试显示该问题 Working bin b
  • 如何剪切(1) 个驼峰字?

    Bash 中有没有一种简单的方法可以将驼峰式单词拆分为其组成词 例如 我想将 aCertainCamelCasedWord 拆分为 a certain Camel Cased Word 并能够选择我感兴趣的那些字段 当单词分隔符是下划线时
  • 如何在 Xamarin.Mac 中执行终端命令并读入其输出

    我们正在编写一个 Xamarin Mac 应用程序 我们需要执行像 uptime 这样的命令 并将其输出读取到应用程序中进行解析 这可以做到吗 在 Swift 和 Objective C 中都有 NTask 但我似乎无法在 C 中找到任何示
  • 设置 Pyenv 的路径

    我正在尝试在我的服务器中设置 Pyenv 的加载路径 bashrc file 我正在关注这个tutorial https realpython com intro to pyenv 它要求我们在哪里设置pyenv到加载路径 然而 在我的 b
  • Inotify linux 监视子目录

    是否可以以这种模式监视目录 storage data usernames Download gt storage data Download 我需要监视每个用户的下载文件夹中是否进行了更改 也许我需要创建所有路径的列表 将其放入数组中 并在
  • 如何不断刷新屏幕并实时更新[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在linux上写一个C程序 不断刷新屏幕并实时更新 例如类似于top终端中的命令 谁能指出我正确的方向 为了保持它跨终端类型的可移
  • 规范化 solaris 上的路径名

    在 GNU 系统上我只会使用readlink f SOME PATH 但 Solaris 没有 readlink 我更喜欢在 bash 中运行良好的程序 但如果需要的话其他程序也可以 Edit 到目前为止 我想到的最好的方法是使用 cd 和
  • 文本处理问题:删除其中一列不包含特定值的行

    我有一个制表符分隔的文件 如下所示 input sequence match sequence score receptor group epitope antigen organism ASRPPGGVNEQF ASRPPGGVNEQF
  • Bash 脚本大小限制?

    我有一个 bash 脚本 在 RHEL 或 OS X 上运行时出现以下错误 第 62484 行 意外标记 换行符 附近出现语法错误 第 62484 行 o gz 这是一个自动生成的脚本 用于解决我公司使用的 Grid Engine 计算集群
  • 在 Fish Shell 中设置导出

    我安装了多个版本的 PHP 对于我的正常开发 我总是使用通过自制程序安装的 PHP 5 5 x 在鱼壳里 which php php version gt usr local bin php gt PHP 5 5 8 cli built J
  • bash 变量中的 Linux 鞭尾/对话框参数错误

    有人可以解释为什么下面的代码不起作用吗 我要疯狂地想找出答案 bin bash TEST M1 1 wire Interface ON echo TEST RESULT dialog title Config Modules State c
  • 使用 sed 删除非字母数字字符

    我正在尝试验证一些输入以删除一组字符 只允许使用字母数字字符加 句点 下划线 连字符 我测试了正则表达式 w here http gskinner com RegExr http gskinner com RegExr 它与我想要删除的内容
  • 如何在 sed 中转义方括号[重复]

    这个问题在这里已经有答案了 我正在使用 grep 和 sed 解析遗留的 C 代码 当尝试替换方括号时 发生了一些奇怪的事情 以下代码替换方括号效果很好 echo xyx xzx xyx sed s g 结果是 xyx xzx xyx 当我
  • 如何在 Mac 上设置默认 shell,例如钓鱼? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我不喜欢重新输入fish每次我启动终端时 我想Fish https en wikipedia org wiki Fish Unix she
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 如何在 Visual Studio Code 中从集成终端引用当前文件

    我想知道是否可以 使用内置变量 直接使用集成终端在 Visual Studio 中打开的当前文件 例如 gt some command current file Where current file would be a built in
  • 从 Amazon S3 存储桶下载文件的脚本

    尝试编写脚本以从 Amazon S3 存储桶下载文件 cURL 网站上的示例遇到问题 下面的脚本产生 我们计算的请求签名与您的签名不匹配 假如 检查您的密钥和签名方法 感谢任何帮助 bin sh file filename php buck

随机推荐

  • Docker 部署 Nginx、frp 实现内网穿透

    原文链接 https waynegong cn posts 8279 html 由于没有公网 IP 加上黑群晖没有洗白 无法进行外网的远程连接 通过 frp 内网穿透后可以通过 sub domain com xxx 的形式访问到内网的 we
  • AD生成PCB引脚出现绿色

    引脚出现绿色是因为引脚之间的间距过窄 与AD默认的连线之间的规则冲突 解决办法 https blog csdn net qq 41862220 article details 90548806
  • vue路由守卫

    vue中路由守卫 路由守卫 一共有三种 一个全局路由守卫 一个是组件内路由守卫 一个是router独享守卫 全局路由守卫 全局前置守卫 从名字全局前置守卫不难理解 它是全局的 即对 整个单页应用 SPA 中的所有路由都生效 所以当定义了全局
  • Anaconda使用conda管理技巧汇总

    0 conda概述 如果你以前使用pip和virtualenv 使用conda你可以完成所有的操作 pip是一个包管理器而virtualenv是一个环境管理器 Conda兼具两者的功能 Task Conda package and envi
  • web前端基础(一)——HTML+CSS

    系列文章目录 web前端基础 一 HTML CSS 目录 系列文章目录 前言 HTML HTML的介绍 1 html的定义 2 html的作用 HTML的基本结构 1 结构代码 2 浏览网页文件 vscode的下载与使用 1 vscode
  • matlab实现大律法,Otsu算法(大律法或最大类间方差法)

    Otsu算法 大律法或最大类间方差法 2013 03 07 10 54 02 Otsu算法 大律法或最大类间方差法 一 Otsu最大类间方差法原理 利用阈值将原图像分成前景 背景两个图象 前景 用n1 csum m1来表示在当前阈值下的前景
  • 在 Docker 内运行 Cronjob:初学者指南

    当涉及到按设定的时间间隔自动运行或可以由另一个事件触发的调度作业和程序时 您有很多选择 您可以使用通用实用程序 如 cron macOS 或 Linux 中的内置调度程序 或专用工具 如 AWS Lambda Cron 虽然不如 AWS L
  • 如何在 Python 中安装 OpenCV

    OpenCV 开源计算机视觉 是一个免费的开源计算机视觉和机器学习算法库 可用于处理和分析图像和视频 它广泛用于各种应用 包括对象检测 图像和视频处理以及增强现实 在本文中 我们将介绍在 Python 中安装 OpenCV 的两种不同方法
  • 如何在 Ubuntu 20.04 上安装 PHP(8.1、7.4 和 5.6)

    在本文中 我们将了解如何在 Ubuntu 操作系统上安装 PHP 脚本语言 PHP 脚本语言是创建动态网站最流行的选项之一 它也用于各种其他环境 它是一种开源编程语言 代表 PHP 超文本预处理器 我们稍后会解释所有这些意味着什么 如果您需
  • Magento 2 性能优化技巧

    随着科技的进步 人们的注意力持续时间在缩短 eBay 旗下的 Magento 是当今用于发展在线业务的最广泛使用的电子商务平台之一 虽然 在选择电子商务 CMS 或平台 例如 WooCommerce Shopify 等 时 您有很多选择 但
  • 如何使用 PHP 获取头像

    当您创建应用程序并希望在其个人资料图片上显示用户的图像时 这可能是您从 Gravatar 帐户获取用户图像的更好选择 我们可以从那里简单地使用他们的电子邮件地址获取图像
  • 如何使用 Wget 忽略 SSL 证书检查

    Wget 是一个免费且功能强大的实用程序 可通过 Cygwin 适用于大多数类 Unix 操作系统 包括 Linux Mac 和 Windows 它允许您使用各种协议 例如 HTTP HTTPS 和 FTP 从服务器检索文件和网页 但是 在
  • 将 Bash 脚本转换为二进制

    Bash shell 是类 Unix 操作系统的主要组成部分 以其脚本化能力而广为人知 然而 这些脚本通常存储为纯文本文件 因此很容易受到检查和更改 在某些情况下 您可能希望将这些 Bash 脚本转换为二进制格式 以提高安全性 效率和可移植
  • 如何在 Ubuntu 上使用 Apache 安装 Mod_Pagespeed

    网站速度缓慢是大多数软件工程师和系统管理员面临的主要问题 他们不断尝试通过各种方式优化速度 那么问题来了 如何提高网站速度呢 提高网站速度的最佳方法是什么 Google 为 Apache 用户提供了 mod pagespeed 模块 可通过
  • 如何在 Linux 中将 PDF 转换为图像

    在本文中 您将学习如何在 Linux 命令行界面中将 PDF 文件转换为图像 Pdftoppm 将可移植文档格式 PDF 文件转换为彩色图像文件 如 PNG JPG 等 Pdftoppm 读取 PDF 文件并为每一页创建一个 PPM 图像
  • 如何在 Ubuntu 18.04 上安装 MySQL 8.0

    MySQL 是最流行的关系数据库管理系统 假设互联网上运行的网站中有三分之一使用 MySQL MySQL 官方团队提供了 MySQL 8 的 Debian 软件包 以便在 Ubuntu 系统上安装 本教程将帮助您在 Ubuntu 18 04
  • 在 CentOS 5/6 和 RHEL 5/6 上安装 PostgreSQL 9.1

    PostgreSQL 是一个开源的对象关系型 高度可扩展 兼容 SQL 的数据库管理系统 本文将帮助您在 CentOS 5 6 和 RHEL 5 6 上安装 PostgreSQL 9 1 第1步 添加 PostgreSQL Yum 存储库
  • 如何使用 PowerShell 从 Windows 命令行发送电子邮件

    发送电子邮件是当今数字时代的一项基本任务 作为系统管理员 您可能需要从命令行发送电子邮件以自动执行此任务 在本文中 我们将向您展示如何使用 PowerShell 从 Windows 命令行发送电子邮件 从而简化您的电子邮件通信并提高您的工作
  • 如何在 Ubuntu 20.04 上安装 Elasticsearch

    Elasticsearch 是一个开源分布式全文搜索和分析引擎 它支持 RESTful 操作 允许您实时存储 搜索和分析大量数据 Elasticsearch 是最流行的搜索引擎之一 为具有复杂搜索要求的应用程序 例如大型电子商务商店和分析应
  • Bash while 循环

    循环是编程语言的基本概念之一 当您想要多次运行一系列命令直到满足特定条件时 循环会很方便 在 Bash 等脚本语言中 循环对于自动执行重复任务非常有用 Bash 脚本中有三种基本的循环结构 for loop while循环 并且直到循环 本