细讲shell中的循环语句--for、while、until

news2024/9/24 11:23:07

目录

一:何为循环

1.循环概述

2.使用循环的好处

二:for循环语句

1.for语句的用法

​2. 语法结构

(1)一般格式

 (2)类C语言格式

(3)死循环

 3.事例

​4.常用转义符

​5.制作九九乘法表

三:while循环

1.while语句

 2.while语句事例

 四:until循环

1.until语句

2.until语句事例

五:跳出循环

 1.continue跳出循环

2. coontinue 2  

 3.break跳出循环

 4.break 2

 总结:编写脚本的思路


一:何为循环

1.循环概述

循环是一种控制流程的结构,用于重复执行一段代码。

遍历是一种数据操作的过程,用于访间并处理数据结构中的每个元素。

在某些情况下,循环和遍历可以结合使用,以便在循环中遍历数据结构并对其进行操作。

循环(Loop)    是计算机编程中非常重要的一种结构,其主要目的是为了简化代码编写。

提高代码的重复利用率,以及提高程序的效率。

2.使用循环的好处

重复执行代码:通过使用循环,可以在程序中重复执行一段代码,从而避免代码的重复编写, 减少程序代码量,提高程序的可读性和可维护性。

简化程序逻辑:使用循环可以使程序逻辑更加简洁明了,提高程序的可读性和可理解性。降低代码出错的可能性。

 提高代码的重复利用率:通过将重复的代码封装在循环结构中,可以提高代码的重复利用率,减少代码冗余。

提高程序的效率:循环可以让程序自动化地执行重复任务,从而减少人工干预的次数,提高程序的效率和性能。

二:for循环语句

1.for语句的用法

读取不同的变量值,用来逐个执行同一组命令

for循环经常使用在已经zhidao要进行多少次循环的场景

格式:
for 变量名 in 取值列表
do
命令序列
done

2. 语法结构

(1)一般格式

 (2)类C语言格式

for ((expr1;expr2;expr3))
do
 echo
done

(3)死循环

for ((;;))

 3.事例

(1)批量创建用户,用户名存放在users.txt文件中,每一个初始密码为123456。

 (2)根据ip地址检测主机状态,IP地址存放在ipadds.txt文件中,每行一个,使用ping命令检测各主机的联通性,ping通的ip地址放到/opt/hosts文件中

 4.常用转义符

echo -n 表示不换行输出

echo -e 输出转义字符,将转义后的内容输出到屏幕上

常用的转义字符如下:
\b 转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;"\b"表示删除前一个字符,"\b\b"表示删除前两个字符。

\c 不换行输出,在"\c"后面不存在字符的情况下,作用相当于 echo -n; 但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出。

\n 换行,被输出的字符从"\n"处开始另起一行。

\f 换行,但是换行后的新行的开头位置连接着上一行的行尾;

\v 与\f相同;

\t 转以后表示插入tab,即横向制表符;

\r 光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖

\\ 表示插入"\"本身;

5.制作九九乘法表

 (1)制作长方形图表

 (2)制作等腰三角形图表

(3)制作九九乘法表

脚本解释:for i in {1..9}设置的是循环9次,

j<=i 表示的是在每次$i循环时$j小于等于$i,大于$i的$j不显示出来

j++是一个后缀自增运算符,表示将变量j的值加1,并返回原始值。

 (4)制作倒的九九乘法表

 三:while循环

1.while语句

while循环满足条件执行,不满足不执行

用于不知道循环次数,需要主动结束循环或达到条件结束循环。

while   [ 判断条件]  

do       

执行动作   while循环执行动作

done         while循环结束标志

 2.while语句事例

(1)输出0-5

 

(2)批量添加用户

 (3)猜数字

 (4)计算机

(5)商场购物并打折

#!/bin/bash
i=1
sum=0
while [ $i -eq 1 ]
do
  echo "要不要进第$i家商店看看呢"
  read -p "是否进入看看(yes/no)" doing
  while [ $doing = "yes" ]
    do
       echo "1:衣服 ¥200"
       echo "2:鞋子 ¥150"  
       echo "3:帽子 ¥50"
       echo "4:裤子 ¥165"
      read -p "请选择需要购买的商品序列号:" num
        case $num in
        1)
          echo "衣服购买成功!"
          expr $[ sum+=200 ] &> /dev/null
        ;;
        2)
          echo "鞋子购买成功!"
          expr $[ sum+=150 ] &> /dev/null
        ;;

        3)
          echo "帽子购买成功!"
          expr $[ sum+=50 ] &> /dev/null
        ;;

        *)
          echo "裤子购买成功!"
          expr $[ sum+=165 ] &> /dev/null
        ;;
        esac
           read -p "是否继续进行购买(yes/no)" doing
     done
let i++
        if [ $doing = "no" ]
           then continue
        fi
done
echo "今天您的购物总价为:$sum"

if [ $sum -ge 150 ] && [ $sum -lt 200 ];then
    let sum=sum-50
elif [ $sum -ge 200 ] && [ $sum -le 400 ];then
    let sum=$sum-100
fi
echo "打折之后的价格为:$sum"  

 四:until循环

1.until语句

通常用于当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环,比如等待某个进程退出、等待某个文件被创建等等。

格式:
until 条件测试操作
do
 命令序列
done

2.until语句事例

计算0-50的总值

#!/bin/bash
#功能1:0-50的和是多少?
#i=0;s=0
#until [ $i -eq 51 ]
#do
 #   let s+=i
  #  let i++
#done
#echo $s

  

五:跳出循环

 1.continue跳出循环

 表示满足continue条件是跳出循环,但是不影响后续循环执行

它的作用是在循环内部跳过本次循环并继续下一次循环

2. coontinue 2  

continue 2会跳过当前循环和两层外层循环的迭代

 3.break跳出循环

在循环内部,当执行到 break 命令时,会立即跳出当前的循环,停止循环执行,然后继续执行下一条指令。
可以使用 break 命令来提前终止循环,例如当达到特定条件时或者已经执行了足够的次数。

 4.break 2

break 2 会跳出当前循环和外层循环的迭代

 总结:编写脚本的思路

1.首先明确脚本的功能
   1.1案例:需求是创建用户并测试用户20个 
                 ->那肯定要用循环for、 while
                 ->知道需求含义来定义脚本的功能
   
2.编写脚本时会使用到哪些命令?
   2.1如上面的需求:就要使用useradd  passwd  let  echo  for  while 等命令

3.把变化的数据使用变量表示【记得要先定义哦】
   3.1固定长的定义变量、经常调用的参数可设变量
   3.2变化的定义变量

4.选择适合的流程控制
4.1【循环语句、双分支、多分支、case等一些控制语句 】

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

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

相关文章

Winform从入门到精通(39)——ToolStrip(史上最全)更新中

1、Name获取控件对象 2、AllowDrop 3、AllowItemReorder 4、AllowMerge 5、Anchor 设置ToolStrip如何锚定父控件 6、AutoSize 设置ToolStrip的尺寸大小是否根据Font属性的变化而变化 7、BackColor 设置ToolStrip的背景色 8、BackgroundImage 设置背景图像 9、Back…

精炼计算机网络——序章(二)

文章目录 前言1.4 计算机网络在我国的发展1.5 计算机网络的类别1.5.1计算机网络的定义1.5.2 几种不同类别的计算机网络 1.6 计算机网络的性能1.6.1 计算机网络的性能指标1.6.2 计算机网络的非性能特征 1.7 计算机网络体系结构1.7.1 计算机网络体系结构的形成1.7.2 协议与划分层…

ChatExcel?

大家好&#xff0c;我是章北海mlpy 最近在浅学LangChain&#xff0c;在大模型时代&#xff0c;感觉这玩意很有前途。 LangChain是一个开源的应用开发框架&#xff0c;目前支持Python和TypeScript两种编程语言。 它赋予LLM两大核心能力&#xff1a;数据感知&#xff0c;将语言模…

5月1日起正式实施!图解《关键信息基础设施安全保护要求》

2023年5月1日&#xff0c;GB/T 39204-2022《信息安全技术 关键信息基础设施安全保护要求》将正式实施。作为我国第一项关键信息基础设施安全保护的国家标准&#xff0c;对于我国关键信息基础设施安全保护有着极为重要的指导意义。 《信息安全技术 关键信息基础设施安全保护要求…

Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

【高烧39°考研上岸】23上交819考研经验分享

笔者来自通信考研小马哥23上交819全程班学员 一&#xff0c;基本情况介绍和考研经历 大家好&#xff0c;首先介绍一下我的基本情况。我本科毕业于东南大学&#xff0c;报考的是上海交通大学电子系电子与通信工程专业&#xff08;专业学位&#xff09;。我二战上岸&#xff0c…

Selenium:HTML测试报告

自动化测试过程中&#xff0c;获得用例的执行结果后&#xff0c;需要有具象化、简洁明了的测试结果&#xff0c;比如&#xff1a;用例执行时间、失败用例数、失败的原因等&#xff0c;这时候&#xff0c;就需要用到测试报告。 HTML测试报告是python语言自带的单元测试框架&…

等保各项费用支出明细

等保收费主要依据文件: 等保工作的定级指南文件_luozhonghua2000的博客-CSDN博客 Q7:做等级保护要多少钱? 答:开展等级保护工作主要包含:规划费用、建设或整改费用、运维费用、测评费用等,具体费用因各单位现状、保护对象承载业务功能、重要程度、所在地区等差异较大。 …

Input事件在应用中的传递(一)

Input事件在应用中的传递(一) hongxi.zhu 2023-4-25 前面我们已经梳理了input事件在native层的传递&#xff0c;这一篇我们接着探索input事件在应用中的传递与处理&#xff0c;我们将按键事件和触摸事件分开梳理&#xff0c;这一篇就只涉及按键事件。 一、事件的接收 从前面的…

Kubernetes(k8s)概念介绍

文章目录 1. k8s概述和特性2. k8s架构组件3. k8s核心概念 1. k8s概述和特性 K8s是一个开源的用于管理云平台中多个主机上的容器化的应用&#xff0c;k8s的目标是让部署容器化的应用简单并且高效&#xff0c;k8s提供了应用部署&#xff0c;规划&#xff0c;更新&#xff0c;维护…

R语言 | 程序的流程控制

目录 一、if语句 1.1 if语句的基本操作 1.2 if...else语句 1.3 if语句也可有返回值 1.4 if...else if...else if...else 1.5 嵌套式if语句 二、递归式函数的设计 三、向量化的逻辑表达式 3.1 处理向量数据if...else的错误 3.2 ifelse()函数 四、switch语句 五、for循…

塔望3W消费战略全案丨窄赛道,高增长 普麦尔知己精酿,掘金中国啤酒利基市场

普麦尔 知己精酿 客户&#xff1a;上海麦仕醇啤酒有限公司 品牌&#xff1a;普麦尔 purmalz beer 服务&#xff1a;3W消费战略 品牌全案 掘金中国啤酒利基市场 精酿啤酒(Craft Beer)的概念最早起源于美国。通常与传统的工业啤酒形成较大的反差&#xff0c;精酿最早的称呼 …

C learning_10 (函数的嵌套调用和链式访问、函数的声明和定义、函数递归)

目录 函数的嵌套调用和链式访问 嵌套调用 函数可以嵌套调用&#xff0c;可以嵌套定义吗&#xff1f; 链式访问 函数的声明和定义 声明 定义 函数递归 递归的两个必要条件 函数的嵌套调用和链式访问 嵌套调用 函数嵌套调用指的是在一个函数中调用另外一个函数&#xf…

OpenSSH升级版本

项目被扫出openssh有严重漏洞&#xff0c;因此要升级openssh到最新版本 1、为防止安装失败&#xff0c;无法用ssh做远程连接&#xff0c;因此先安装telnet防一手 yum -y install telnet*systemctl enable telnet.socketsystemctl start telnet.socket注&#xff1a;安全文件关…

【星戈瑞】脂溶性CY5.5马来酰亚胺Cyanine5.5 maleimide

脂溶性CY5.5马来酰亚胺是一种荧光染料&#xff0c;其分子中含有马来酰亚胺结构&#xff0c;结构中的共轭体系赋予其良好的光学性质。该染料在红外区域有较强的吸收峰&#xff0c;具有较高的荧光量子产率和较长的荧光寿命&#xff0c;因此被应用于细胞和生物分子的荧光标记和成像…

cleanmymac正式版mac电脑清理软件

电脑清理软件在我们的电脑使用过程中是非常实用便捷的清理软件.当电脑使用了一段时间内,电脑就会产生各种各样的垃圾文件,比如说残留的注册表或者无效的注册表,系统碎片以及毫无用处的文件等,这些的存在将会极大程度地拖慢电脑的运行速度,而你删除的话可能会删除本不能删除的文…

解锁新技能《Java绘制2D图形验证码方法》

一、常见的图形验证码有如下三种&#xff1a; 字母数字混合&#xff08;干扰线&#xff09;&#xff1b;纯数字&#xff08;干扰线&#xff09;&#xff1b;纯字母&#xff08;干扰线&#xff09;&#xff1b; 二、示例图如下&#xff1a; 三、案例代码 问题一&#xff1a;绘…

LC-2106. 摘水果(滑动窗口)

2106. 摘水果 难度困难78 在一个无限的 x 坐标轴上&#xff0c;有许多水果分布在其中某些位置。给你一个二维整数数组 fruits &#xff0c;其中 fruits[i] [positioni, amounti] 表示共有 amounti 个水果放置在 positioni 上。fruits 已经按 positioni 升序排列 &#xff0c…

C语言动态内存管理与文件操作:打造高效通讯录

本篇博客会讲解如何使用C语言实现一个通讯录。实现通讯录的过程中&#xff0c;会大量用到C语言的知识点&#xff0c;包括但不限于&#xff1a;函数、自定义类型、指针、动态内存管理、文件操作&#xff0c;这些知识点在我的其他博客中都有讲解过&#xff0c;欢迎大家阅读&#…

进程及进程管理

Linux基础 提示&#xff1a;个人学习总结&#xff0c;仅供参考。 一、Linux系统部署 二、服务器初始化 三、文件和用户管理 四、用户的权限 五、进程及进程管理 提示&#xff1a;文档陆续更新整理 进程及进程管理 Linux基础一、进程简介&#xff08;一&#xff09;进程三问…