热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Bashwhile循环

在本小节中,将演示如何在Bash脚本中使用while循环语句。bashwhile循环可以定义为控制流语句,只要所应用的条件为真,该语句就允许重复执行给定的命令集。例如,可以运行多次

在本小节中,将演示如何在Bash脚本中使用while循环语句。

bash while循环可以定义为控制流语句,只要所应用的条件为真,该语句就允许重复执行给定的命令集。例如,可以运行多次echo命令,也可以仅逐行读取文本文件,然后使用Bash中的while循环处理结果。

Bash While循环语法

Bash while循环具有以下格式:

while [ expression ];
do
commands;
multiple commands;
done

仅当表达式(expression)包含单个条件时,以上语法才适用。

如果表达式中包含多个条件,则while循环的语法如下:

while [ expressions ];
do
commands;
multiple commands;
done

while循环单行语法可以定义为:

while [ condition ]; do commands; done
while control-command; do Commands; done

while循环语句有一些关键要点:

  • 在执行命令之前检查条件。
  • 可以使用while循环来执行“for循环”的所有工作。
  • 只要条件评估为真,dodone之间的命令就会重复执行。
  • while循环的参数可以是布尔表达式。

如何工作

while循环是一个受限的输入循环,因此在执行while循环的命令之前要先检查条件。如果条件评估为真,则执行该条件之后的命令集。否则,循环终止,并且在done语句之后将程序控制权交给另一个命令。

While循环示例

以下是bash while循环的一些示例:

示例1. 单条件的While循环
在此示例中,while循环与表达式中的单个条件一起使用。这是while循环的基本示例,它将根据用户输入打印一系列数字。

脚本文件:while-basic.sh

#!/bin/bash
#Script to get specified numbers
read -p "Enter starting number: " snum
read -p "Enter ending number: " enum
while [[ $snum -le $enum ]];
do
echo $snum
((snum++))
done
echo "This is the sequence that you wanted."

执行上面示例代码,得到以下结果:
《Bash while循环》

示例2. 有多个条件的While循环

以下是在表达式中具有多个条件的while循环示例。

脚本文件:while-basic2.sh

#!/bin/bash
#Script to get specified numbers
read -p "Enter starting number: " snum
read -p "Enter ending number: " enum
while [[ $snum -lt $enum || $snum == $enum ]];
do
echo $snum
((snum++))
done
echo "This is the sequence that you wanted."

执行上面示例代码,得到以下结果:
《Bash while循环》

示例3. 无限While循环
无限循环是没有结束或终止的循环。如果条件始终评估为true,则将创建一个无限循环。循环将会连续执行,直到使用CTRL + C强行停止循环为止。

脚本文件:while-infinite.sh

#!/bin/bash
#An infinite while loop
while :
do
echo "Welcome to Yiibai."
sleep 1s
done

也可以将上述脚本写成一行:

#!/bin/bash
#An infinite while loop
while :; do echo "Welcome to Yiibai."; done

执行上面示例代码,得到以下结果:
《Bash while循环》

在这里,我们使用了始终返回true的内置命令(:)。还可以使用内置命令true来创建无限循环,如下所示:

#!/bin/bash
#An infinite while loop
while true
do
echo "Welcome to Yiibai"
done

上面bash脚本输出与上述无限脚本输出的结果相同。

注意:无限循环可以通过使用CTRL + C或在脚本内添加一些条件退出来终止。

示例4. While循环与Break语句
根据所应用的条件,可以使用break语句来停止循环。脚本文件:whilie-break.sh

#!/bin/bash
#While Loop Example with a Break Statement
echo "Countdown for Website Launching..."
i=10
while [ $i -ge 1 ]
do
if [ $i == 2 ]
then
echo "Mission Aborted, Some Technical Error Found."
break
fi
echo "$i"
(( i-- ))
done

根据上面脚本,将循环分配为迭代十次。但是在八次迭代之后存在一个条件,该条件会中断迭代并终止循环。执行脚本后,显示如下输出。
《Bash while循环》

示例5. While循环与Continue语句

continue语句可用于在while循环内跳过特定条件的迭代。

脚本文件:while-continue.sh

#!/bin/bash
#While Loop Example with a Continue Statement
i=0
while [ $i -le 10 ]
do
((i++))
if [[ "$i" == 5 ]];
then
continue
fi
echo "Current Number : $i"
done
echo "Skipped number 5 using Continue Statement."

执行上面示例代码,得到以下结果:
《Bash while循环》

示例6. C语言样式while循环

还可以在bash脚本中编写像在C编程语言中编写while循环一样。脚本文件:while-cstyle.sh

#!/bin/bash
#While loop example in C style
i=1
while((i <= 10))
do
echo $i
let i++
done

执行上面示例代码,得到以下结果:

《Bash while循环》


    推荐阅读
    • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
      本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
    • Metasploit攻击渗透实践
      本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
    • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
      本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
    • sklearn数据集库中的常用数据集类型介绍
      本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
    • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
    • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
      本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
    • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
    • Go Cobra命令行工具入门教程
      本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
    • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
    • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
    • Spring框架《一》简介
      Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
    • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
    • Python脚本编写创建输出数据库并添加模型和场数据的方法
      本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
    • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
    • Android日历提醒软件开源项目分享及使用教程
      本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
    author-avatar
    手机用户2502931035
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有