shell编程中 for while until循环的使用方法及案例

CSDN 成就一亿技术人!

作者主页:点击!

Shell编程专栏:点击!

CSDN 成就一亿技术人

————前言————

Shell脚本编程中,有几种常见的循环结构,包括for循环、while循环和until循环,总的来说,循环在Shell编程中扮演着至关重要的角色,它们使得自动化任务变得更加容易,提高了效率,并且可以处理各种各样的编程需求。

1.for循环

for循环允许你对一组元素(如数组中的元素、文件中的行、命令的输出等)进行迭代。

最常用的for循环

语法如下:

for i in list
do执行语句
done
  • i:循环变量,用于依次存储列表中的元素。
  • list:循环的元素列表,可以是由空格分隔的字符串,也可以是数组等。

实例如下:

利用for循环在/目录下创建csdni个文件夹

#!/bin/bash
for i in {1..10}
domkdir /csdn$i
done

输出结果:

这是最基本的for循环语句

还可以用另外一种写法(等同于上边的写法)

#!/bin/bash
for i in $(seq 1 10)
domkdir /csdn$i
done

实验创建用户

#!/bin/bash
#2024-3-7for i in {1..10}
do
useradd  "csdn$i"
echo "csdn$i创建成功"
done       

那么留给小伙伴们一个动手操作的实验 就是利用for循环来自动删除上边创建的用户

常用做法

人力部门给你发来一个名单现如今需要 创建对应的用户

如果名单有300个名字该如何创建呢 该不会是在人力部门报名完毕 之后跑到运维部来一个个创建用户吧

哈哈哈那样不得累坏

如下所示使用for几个命令搞定 这就是for循环的好处 当然使用其他循环也是可以实现的 下边举个例子供大家参考:
 

#!/bin/bash
[root@localhost ~] cat /etc/tables 
zhangsan
lisi
wangwu
csdn
csdn2
xiaomingvim for.sh	编辑脚本
for i in `cat /etc/tables`		写入循环
do
useradd  "$i"
echo "$i创建成功"
done

C编程迭代循环

我们可以像 C 编程一样迭代循环。

#!/bin/bash
for ((i=1; i<=20; i++))
doecho $i
done

打印从5到1

#!/bin/bash
for ((i=5; i>=1; i--))
do
echo $i
done

2.while循环

while循环又叫做死循环 

while循环是Shell脚本编程中一种常见的循环结构,它允许你根据条件重复执行一组命令,直到条件不再满足为止。

语法格式:

1 while 条件测试
2 do
3   执行命令
4 done
  • 执行命令:循环条件,可以是任何能够产生退出状态码(0或非0)的表达式。
  • 当条件满足时,执行循环体中的命令;每次循环结束后重新检查条件,直到条件不再满足为止。

实例如下:

#!/bin/bashwhile :
do
let i++
echo $i
done

大家可以试一下这个我就不截图了。。。。。

通常循环都是结合判断语句来使用的

#!/bin/bashwhile :
do
let i++if [ $i -eq 10  ];thenecho "while实验结束!"breakelseecho $ifi
done

3.until循环

until循环是Shell脚本编程中的另一种常见循环结构,与while循环类似,但它在条件为假时执行循环体,直到条件为真为止。

语法格式:

until [ 条件判断]
do# 执行语句
done
  • 条件判断:循环条件,可以是任何能够产生退出状态码(0或非0)的表达式。在每次循环迭代开始时,都会对条件进行求值。如果条件为假(退出状态码非0),则执行循环体中的命令;如果条件为真(退出状态码为0),则退出循环。

  • dodonedo 标记了循环体的开始,done 标记了循环体的结束。循环体是在每次循环迭代时执行的一组命令。

实例如下:

#!/bin/bash
let i=0
until [ $i -eq 5 ]
do
let i++
sleep 0.1
echo $i
done

详解这个过程

  1. 初始时,i的值为0。
  2. 进入until循环,检查条件$i -eq 5是否为真,因为i的初始值是0,条件为假,因此执行循环体。
  3. 执行let i++递增i的值,此时i的值变为1。
  4. 执行echo $i打印出当前的i值,即1。
  5. 循环继续,进入下一次迭代,重复步骤2至4,直到i的值等于5,此时循环终止。

区别

  1. for循环

    • 用于对一组元素(如数组中的元素、文件中的行、命令的输出等)进行迭代。
    • 循环的次数在循环开始之前就确定了,通常用于已知循环次数的情况。
    • 语法形式为for variable in list,其中variable是循环变量,list是迭代的元素列表。
  2. while循环

    • 在循环开始之前,根据条件的真假来决定是否执行循环体。
    • 循环次数不一定是固定的,而是在运行时根据条件确定的。
    • 语法形式为while [ condition ],循环条件的结果必须是退出状态码为0或非0的表达式。
  3. until循环

    • 在循环开始之前,根据条件的真假来决定是否执行循环体,与while循环相反,它在条件为假时执行循环体,直到条件为真。
    • 循环次数同样不一定是固定的,而是在运行时根据条件确定的。
    • 语法形式为until [ condition ],循环条件的结果同样必须是退出状态码为0或非0的表达式。

总结:

  • for循环适用于已知循环次数的情况,可以用于迭代已知的元素列表。
  • while循环适用于根据条件决定循环执行的情况,循环次数不一定固定。
  • until循环也适用于根据条件决定循环执行的情况,与while循环不同的是它在条件为假时执行循环体。

选择合适的循环结构取决于具体的编程需求和循环条件。

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

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

相关文章

C goto 语句

C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。 注意&#xff1a;在任何编程语言中&#xff0c;都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪&#xff0c;使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语…

PWM驱动舵机

PWM驱动舵机 接线图 程序结构图&#xff1a; pwm.c部分代码 #include "stm32f10x.h" // Device headervoid PWM_Init(void){// 开启时钟&#xff0c;这里TIM2是通用寄存器RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);// GPIO初始化代…

MATLAB中的脚本和函数有什么区别?

MATLAB中的脚本和函数是两种不同的代码组织方式&#xff0c;它们在结构、功能和使用方式上有显著的区别。以下是对这两种方式的详细解释&#xff0c;总计约2000字。 一、MATLAB脚本 MATLAB脚本是一种包含多条MATLAB命令的文件&#xff0c;这些命令按照在文件中的顺序依次执行…

2.27线性模型

可以利用无监督学习解决的问题&#xff0c;大致分为两类&#xff1a; 关联分析&#xff1a;发现不同事物之间同时出现的概率。在购物篮分析中被广泛地应用。如果发现买面包的客户有百分之八十的概率买鸡蛋&#xff0c;那么商家就会把鸡蛋和面包放在相邻的货架上。 聚类问题&a…

Java的集合类

一、集合&#xff08;Collection和Map&#xff09; &#xff08;一&#xff09;List集合&#xff08;有序&#xff0c;可重复&#xff0c;存取顺序一致&#xff09;&#xff1a; 1.概述&#xff1a; 有序的collection&#xff0c;此接口的用户可以对列表中每个元素的插入位置…

onnx 格式模型可视化工具

onnx 格式模型可视化工具 0. 引言1. 可视化工具2. 安装 Netron: Viewer for ONNX models 0. 引言 ONNX 是一种开放格式&#xff0c;用于表示机器学习模型。ONNX 定义了一组通用运算符&#xff08;机器学习和深度学习模型的构建基块&#xff09;和通用文件格式&#xff0c;使 A…

100天精通Python(实用脚本篇)——第118天:基于selenium和ddddocr库实现反反爬策略之验证码识别

文章目录 专栏导读一、前言二、ddddocr库使用说明1. 介绍2. 算法步骤3. 安装4. 参数说明5. 纯数字验证码识别6. 纯英文验证码识别7. 英文数字验证码识别8. 带干扰的验证码识别 三、验证码识别登录代码实战1. 输入账号密码2. 下载验证码3. 识别验证码并登录 书籍推荐 专栏导读 …

SAR ADC教程系列5——FFT频谱泄露以及相干采样

频谱泄露的出现以及如何规避&#xff1f; 为什么要相干采样&#xff1f; 1.分析ADC输出信号的频谱工具&#xff1a;DFT&#xff08;Discrete Fourier Transform) 重点&#xff1a;DFT相邻频谱频率间隔为fs/N 如何规避频谱泄露&#xff1f; 对于DFT&#xff0c;它对于接收到的信…

前端项目部署后,如何提示用户版本更新

目录 前言解决方案1、public目录下新建manifest.json2、写入当前时间戳到manifest.json3、检查版本更新4、woker线程5、入口文件引入 可能出现的问题 前言 项目部署上线后&#xff0c;特别是网页项目&#xff0c;提示正在操作系统的用户去更新版本非常 important。一般我们都会…

osg执行opengl4.3的shader报错

运行案例&#xff1a;运行这篇博客的opengl4.3的例子&#xff0c;OSG使用GLSL各个版本例子&#xff0c;报如下错误&#xff1a; Warning: detected OpenGL error invalid operation at after pcp->apply(Unfiorm&) in GLObjectsVisitor::apply(osg::StateSet& stat…

C++ 笛卡尔树

目录 一、性质二、构建笛卡尔树三、应用四、源码 一、性质 堆性质&#xff1a; 笛卡尔树是一种满足堆性质的树。每个节点包含两个值&#xff1a;键值&#xff08;key&#xff09;和优先级值&#xff08;priority&#xff09;。在笛卡尔树中&#xff0c;根节点的优先级值最大&am…

Prompt提示工程上手指南:基础原理及实践(三)-Prompt个性知识库引导

前言 Prompt系列的第二期文章已经将所有的Prompt工程主流策略讲解完毕&#xff0c;共涉及到六种Prompt类别模型以及具体生产内容详解。再结合系列第一篇文章具体对Prompt工程的详细介绍&#xff0c;也就可以达到Prompt工程师的初步入门&#xff0c;现在如果掌握了这些基础技能…

电话机器人系统搭建安装教程步骤

电话机器人系统搭建安装的步骤可能会因具体的产品和服务提供商有所不同&#xff0c;但一般来说&#xff0c;以下是一些基本的步骤&#xff1a; 1. 准备硬件和软件环境 首先&#xff0c;你需要准备合适的硬件和软件环境。这可能包括一台或多台计算机&#xff0c;以及相应的操作…

价值学习和策略学习的区别

价值学习&#xff08;Value Learning&#xff09;和策略学习&#xff08;Policy Learning&#xff09;是强化学习中的两种主要方法&#xff0c;它们在如何学习和做出决策上有根本的区别。 价值学习&#xff1a; 价值学习的核心在于评估每个状态&#xff08;或状态和动作的组合&…

在pharmit里匹配药效团

我把400个无活性的小分子&#xff08;decoys&#xff09;提交到pharmit里。 命名为decoyset00~decoyset08&#xff0c;查找时&#xff0c;按这个找。 1、导入药效团配体&#xff1a; 进入药效团筛选界面&#xff1a; 导入代表药效团模型的活性肽构象&#xff1a; 2、选择预先…

MATLAB环境下基于可调Q因子小波变换的滚动轴承故障诊断(MATLAB R2021B)

小波变换是一种时频局域化方法&#xff0c;它的窗口面积固定但形状可以发生改变&#xff08;时间窗与频率窗均可变化&#xff09;。小波变换在时间域与频率域都能够表示信号的局部特征&#xff0c;并具有多分辨率分析的特点&#xff0c;是机械故障诊断中常用的方法。小波变换故…

【C++】手撕红黑树

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能直接手撕红黑树。 > 毒鸡汤&#xff1a;行到…

计算机设计大赛 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…

OLAP与数据仓库和数据湖

OLAP与数据仓库和数据湖 本文阐述了OLAP、数据仓库和数据湖方面的基础知识以及相关论文。同时记录了我如何通过ChatGPT以及类似产品&#xff08;通义千问、文心一言&#xff09;来学习知识的。通过这个过程让我对于用AI科技提升学习和工作效率有了实践经验和切身感受。 预热 …

vue2使用axios封装请求数据,教会你封装,简单易懂,轻松学会axios封装请求数据 看一眼就会 手把手教会

前端vue2中axios封装请求数据&#xff0c;教会你封装教会你请求数据 简单易懂&#xff0c;轻松学会axios封装请求数据 看一眼就会 手把手教会 1、在完成下面的步骤之前&#xff0c;先脚手架创建vue项目&#xff0c;然后再vue项目当中&#xff0c;首先先创建一个文件夹utils&…