第五章 流程控制之循环

目录

1.1. for循环

1.1.1. 带列表的for循环

1.1.2. 不带列表的for循环

1.1.3. 基于C语言风格的for循环

1.2. while循环

1.2.1. 格式

1.2.2. while循环读取文件

1.3. until循环

1.3.1. 作用

1.4. 循环控制

1.4.1. 组成

1.4.2. 详细语法:

1.4.3. 示例

1.4.4. 循环嵌套


1.1. for循环

for循环是最简单,也是最常用的循环语句。与其他的程序设计语言一样,for

环都是初学者在学习循环结构时的入门课程。for循环通常用于遍历整个对象或

者数字列表。按照循环条件的不同,for循环语句可以分为带列表的for循环、不

带列表的for循环以及类C风格的for循环。本节将介绍这3种不同的for循环结构。

1.1.1. 带列表的for循环

格式:

for variable in {list}
dostatement1statement2...
done

分析

variable称为循环变量

list是一个列表,可以是一系列的数字或者字符串,元素之间使用空格隔开

dodone之间的所有的语句称为循环体,即循环结构中重复执行的语句

执行时,Shell会将in关键字后面的list列表的第1个元素的值赋给变量variable,然后执行循环体,当循环体中的语句执行完毕之后剩余以此类推,当list列表中的所有的元素都被访问后,for循环结构终止,程序将继续执行done语句后面的其他的语句

例1:

[root@server ~]# vim for1.sh
#!/bin/bash
for IP in 192.168.223.129 192.168.223.130 192.168.223.131
doecho $IP
done[root@server ~]# bash for1.sh

[root@server ~]# vim for2.sh
#!/bin/bashfor IP in 192.168.223.{129..135}
doecho $IP
done

例2:获取目录下所有目录的文件名

shell允许用户指定for语句的步长,格式如下

# ls -F 用于将目录内的文件按照文件类型归类显示,会在不同类别的文件尾部增加
不同的标识符,目录以/结尾,链接文件以@结尾,可执行文件以*结尾
# grep /$:表示过滤以/结尾的内容
[root@server ~]# vim for3.sh
#!/bin/bashfor FILE in $(ls -F / | grep /$)
doecho $FILE
done

shell允许用户指定for语句的步长,格式如下

for variable in {start..end..step}
dostatement1statement2...
done	

例3:计算1+3+5+7+9+……+99之和

[root@server ~]# vim for4.sh
#!/bin/bashsum=0
for i in {1..99..2}
dolet sum=sum+i
done
echo "sum=$sum"

1.1.2. 不带列表的for循环

原则:for不提供循环列表,shell将从命令行获取循环列表数据及条件,格式:

for variable
dostatement1statement2...
done

由于系统变量$@可以获取所有位置参数,以上的语法等价于:

for variable in $@或$*
dostatement1statement2...
done

例4:

[root@server ~]# vim for5.sh
#!/bin/bashfor arg
doecho $arg
done
[root@server ~]# bash for5.sh {1..10}

1.1.3. 基于C语言风格的for循环

格式

for ((初始化;条件表达式;步长)) # 注意:2个园括号
dostatement1statement2...
done

例5:面试题:批量创建用户

#!/bin/bash#批量创建账户for((i=1;i<=10;i++))
doif ! id -u temp$i &> /dev/nullthenuseradd temp$iecho "123" | passwd --stdin temp$i &> /dev/nullelseecho "temp$i is exists......"fi
done

注意:i++表示置后自增,++i置前自增

[root@server ~]# x=1
[root@server ~]# y=2
[root@server ~]# echo $((x++))
1
[root@server ~]# echo $((++y))
3

1.2. while循环

1.2.1. 格式

while expression
dostatement1statement1……
done

上例语法中,expression表示条件表达式,循环必须满足该表达式,否则循环结束,可以是任何符合语法的shell命令,但推荐书写测试表达式

1.2.2. while循环读取文件

# 法1 ,采用exec读取文件
[root@server ~]# vim file1.txt
data1
data2
data3
data4
data5
#!/bin/bashexec < file1.txtwhile read a
doecho $a
done    
# exec < file1.txt 将file.txt文件内容读入到标准输入中
# read a 表示从标准输入中按照行读取内容到变量a

# 法2:使用cat读取文件,通过管道符进入while循环处理cat 文件名 | while read line
dostatement1statement1……
done
#法3 : 在while循环尾部使用输入重定向指定输入数据
while read line
dostatement1statement1……
done < 文件名

1.2.3. while语句示例

例1:猜测商品价格,通过变量RANDOM获取随机整数并控制在20以内,提示用户猜测商品价格,猜测时需要记录次数,猜中后退出程序

#!/bin/bash#猜测商品价格,随机控制在20以内,计算猜测次数PRICE=$[ $RANDOM%20 ]  # 产生随机数控制在20以内count=0while true     # 恒真执行
doread -p "请输入[0-20]间的商品价格" INT  let count++if (($INT==$PRICE))  thenecho "恭喜你猜对了"echo "你使用了$count 次机会"exit 0     # 退出程序,返回0状态elif (($INT>$PRICE))thenecho "你输入的商品价格高了"elseecho "你输入的商品价格低了"fi
done

1.3. until循环

1.3.1. 作用

until循环不断地重复执行循环中的语句,直至某个条件不成立

until expreession
dostatement1statement2……
done

expression是一个条件表达式,值不为0时,执行do与done之间的语句,值为0时退出until循环

1.3.2. 示例

例2:将例5中改写为删除账户

#!/bin/bashi=1until [ $i -gt 10 ]
doif id -u temp$i &> /dev/nullthenuserdel -r temp$ielseecho "temp$i is not exists...."filet i++
done

1.4. 循环控制

1.4.1. 组成

break: 是立即跳出某个循环结构。break语句可以用在for、while或者until等循环语句的循环体中

continue: 作用不是退出循环体。而是跳过当前循环体中该语句后面的语句,重新从循环语句开始的位置执行

1.4.2. 详细语法:

1.4.3. 示例

例1:判断素数

#!/bin/bash#判断素数read -p "请输入一个大于2的整数:" primeif ((prime<2))
thenecho "数据错误,请输入大于等于2的整数"
elsefor((i=2;i<prime;i++))doif ((prime%i==0))thenecho "平数"breakfi      doneif ((i==prime))then    echo "素数"fi      
fi

例2:计算100到150之间不能被3整除的数,输出时一行显示5个

#!/bin/bash#计算100到150之间不能被3整除的数,一行打印5个count=0for ((i=100;i<=150;i++))
doif ((i%3==0))thencontinuefiecho -ne "$i\t"((count++))if ((count%5==0))thenechofi
done
echo

1.4.4. 循环嵌套

例1:打印九九乘法表

#!/bin/bashfor i in $(seq 9)
dofor j in `seq 9`do((j<=i)) && echo -ne "$i*$j =  `echo $((i*j))`\t"doneecho
done

例2:打印三角形

#!/bini/bash#打印数字组成的三角形for ((i=1;i<10;i++))
dofor ((j=1;j<=10-i;j++))doecho -n " " donefor ((k=1;k<=i;k++))doecho -n "$i "doneecho
done

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2804295.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA工程师面试专题-并发编程篇

目录 一、线程 1、并发与并行的区别 2、同步和异步的区别 3、Java中创建线程有哪些方式? 4、Thread和Runnable的区别 5、Java中的Runnable、Callable、Future、FutureTask的区别和联系&#xff1f; 6、说一下你对 CompletableFuture 的理解 7、volatile关键字有什么用&…

Kubernetes 声明式API

对于声明式API来说&#xff0c;只需向系统提交一个定义好的API对象来声明资源对象的"期望状态"。然后由系统去确保资源对象从"当前状态"迁移到"期望状态"。这里的API对象是一种"意向表达&#xff08;Record of Intent&#xff09;“。创建A…

Jenkins持续集成Python项目

一、前言   之前学习了很多自动化测试框架&#xff0c;但是写的脚本都是本地执行&#xff0c;多数用来造数据。最近公司掀起一股自动化测试的风&#xff0c;所以就想研究下如何集成jenkins&#xff0c;本次采用pytest&#xff0c;用的是阿里云服务器centos7。 二、服务器环境…

1.网络游戏逆向分析与漏洞攻防-游戏启动流程漏洞-测试需求与需求拆解

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;分析接收到的对话数据包 这是一个新的篇章&#xff0c;之前是关于把我们的东西放进游戏里和内存里的数据分析与利用&#xff0c;现在是专注于网络部分&#xff0c;通过分析网络数据包得到应用程序中各…

J7 - 对于ResNeXt-50算法的思考

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 J6周有一段代码如下 思考过程 首先看到这个问题的描述&#xff0c;想到的是可能使用了向量操作的广播机制然后就想想办法验证一下&…

华清远见作业第四十二天——Qt(第四天)

思维导图&#xff1a; 编程&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTextToSpeech> //语音播报类 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public Q…

【C++精简版回顾】5.字符串

1.字符串的四种初始化方式 string str "ilove"; string str1("ilove"); string str2(str1); string str3 str1; 2.针对字符串的一些函数 &#xff08;1&#xff09;字符串长度 cout<<str.length()<<endl;&#xff08;2&#xff09;查找字…

基于qt的图书管理系统----03核心界面设计

参考b站&#xff1a;视频连接 源码github&#xff1a;github 目录 1 添加软件图标2 打包程序3 三个管理界面设计4 代码编写4.1 加载界面4.2 点击按钮切换界面4.3 组团添加样式4.4 搭建表头4.5 表格相关操作 从别人那里下载的项目会有这个文件&#xff0c;里边是别人配置的路径…

[NOI2000]单词查找树

牛客题目链接:https://ac.nowcoder.com/acm/problem/16864 题目描述: 在进行文法分析的时候&#xff0c;通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度&#xff0c;通常都要画出与单词列表所对应的单词查找树&#xff0c;其特点如下 (1). 根节点不包含…

Docker 是怎么工作的?

Docker 是怎么工作的&#xff1f; 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 Docker 是如何工作的&#xff1f; 下图展示了 Docker 的架构&#xff0c;以及当我们运行 “docker build”、"docker pull "和 "docke…

灌水:powershell 练习正则表达式

亲爱的读者们&#xff0c;请展示你们的能力&#xff1a;解析&#xff08;使用代码&#xff09;解析以下字符串 <鱼龙混杂的奇葩文件#> UI1|System.Windows.Forms.linklabel #创建用户对象 1.location.250.250 1.text.磁盘清理 1.autosize #自适应大小 #存在混淆风险…

分享一个UE的SmoothStep小技巧

SmoothStep节点可以制作更平滑的动画&#xff0c;而如果将max参数作为值传入将value和min参数作为约束&#xff0c;则可以做出类似冲击波的渐变效果&#xff1a; 并且通过修改value与min之间的数值差&#xff0c;可以调节渐变。 这个技巧主要就是可以产生硬边。 比如我们可…

Node.js的debug模块源码分析及在harmonyOS平台移植

Debug库 是一个小巧但功能强大的 JavaScript 调试工具库&#xff0c;可以帮助开发人员更轻松地进行调试&#xff0c;以便更快地发现和修复问题。它的主要特点是可以轻松地添加调试日志语句&#xff0c;同时在不需要调试时可以轻松地禁用它们&#xff0c;以避免在生产环境中对性…

【qt】类似微信扫描动画局部paint,防止cpu占用过高

实现类似微信扫码扫描效果&#xff0c;arm性能不高&#xff0c;如果直接定时器move线条的位置全局paint&#xff0c;会导致cpu占用过高&#xff0c;UI卡顿。所以需要仅仅绘制需要绘制的区域&#xff0c;减少cpu占用。 主要代码 #define MOVE_STEP 2 #define START_Y 300 #de…

使用HiveMQ实现Android MQTT

MQTT官网&#xff1a;https://mqtt.org/ 百度Android MQTT&#xff0c;或者B站上搜索&#xff0c;发现大多使用https://github.com/eclipse/paho.mqtt.android&#xff0c;这是Eclipse的一个Android MQTT客户端实现库&#xff0c;但是我发现这个库在运行到高版本的手机上时报错…

第九节HarmonyOS 常用基础组件27-Rating

1、描述 提供在给定范围内选择评分的组件。 2、接口 Rating(options?:{rating:number, indicator?:boolean}) 3、参数 参数名 参数类型 必填 描述 rating number 是 设置并接收评分值。默认值&#xff1a;0&#xff1b;取值范围[0, stars]&#xff0c;小于0取0&am…

运维SRE-17 自动化批量管理-ansible3

--- - hosts:alltasks:- name: 01 打开冰箱门shell: echo 01 >> /tmp/bingxiang.log- name: 02 把大象放进冰箱里shell: echo 02 >> /tmp/bingxiang.log- name: 03 关上冰箱门shell: echo 03 >> /tmp/bingxiang.log[rootm01 /server/ans/playbook]# cat 05-n…

Spring Boot WebFlux:实现web(Server-Sent Events)事件异步推送

WebFlux 在Spring Boot中&#xff0c;Flux是一个重要的概念&#xff0c;它是Spring Framework 5.0以后引入的响应式编程框架WebFlux的核心组件之一。Flux是Reactor项目的一部分&#xff0c;它实现了Reactive Streams规范&#xff0c;用于处理异步、非阻塞的数据流。 与传统的…

Grounded-SAM(最强Zero-Shot视觉应用):本地部署及各个模块的全网最详细使用教程!

本篇文章主要对Grounded-SAM项目的部署以及使用进行讲解&#xff0c;目的是使读者可以直接参考文档去使用Grounded-SAM&#xff0c;而无需再去参考Github一步步自己去分析尝试&#xff08;也算是我使用过程中的心得&#xff09;。 对于Grounded-SAM 技术报告的paper阅读可以跳转…

介绍 CI / CD

目录 一、介绍 CI / CD 1、为什么要 CI / CD 方法简介 1、持续集成 2、持续交付 3、持续部署 2、GitLab CI / CD简介 3、GitLab CI / CD 的工作原理 4、基本CI / CD工作流程 5、首次设置 GitLab CI / CD 6、GitLab CI / CD功能集 一、介绍 CI / CD 在本文档中&#x…