[Shell编程学习路线]——While循环应用技巧 (详细讲解)

 

🏡作者主页:点击! 

🛠️Shell编程专栏:点击!

⏰️创作时间:2024年6月20日16点30分

🀄️文章质量:95分


目录

————前言————

基本结构

图示原理

示例

测试

举一反三

总结


————前言————

在Shell编程的世界中,while循环是另一个强大的控制结构,与for循环一样,它在自动化任务和脚本编写中扮演着重要角色。while循环的灵活性使其能够处理各种条件控制的任务,从简单的计数器到复杂的逻辑判断,while循环都能提供有效的解决方案。

在这篇文章中,我们将深入探讨Shell脚本中的while循环,了解其基本语法和高级应用。通过多个实例演示,帮助你掌握while循环的各种使用技巧,提升脚本编写的效率和精度。不论你是初学者还是有一定经验的开发者,这里都有你需要的实用知识和技巧。

while 循环是 Shell 脚本中最简单的一种循环结构,它允许您根据指定的条件重复执行一组语句。当条件 为真时,循环将继续执行;当条件为假时,循环将停止。

基本结构

while 条件测试
do
执行的语句块
done

其中: 条件测试 :表示要判断的条件。该条件可以是任何 shell 表达式,其返回值为真或假。

执行的语句块 :表示将在条件为真时重复执行的语句。该语句块可以包含多个语句,使用分号分 隔。

图示原理


while循环的执行流程可以分为以下几个步骤:


1.判断条件:首先,shel‖会执行whTe循环的条件测试部分。如果条件为真,则进入循环体;如果
条件为假,则跳过循环体,直接执行done之后的语句。


2.执行循环体:如果条件为真,则执行wTe循环的循环体部分。循环体中的语句将逐个执行。


3.更新条件:执行完循环体中的语句后,she会更新while循环的条件测试部分。通常情况下,条
件测试会涉及循环变量或其他会随着循环而变化的值。


4.重复步骤1-3:重复步骤1-3,直到条件为假为止。

示例

使用while循环来添加用户 用户的添加格式为 user1 user2 user3 一次类推...... 编写脚本

vim while.sh
#!/bin/bash
i=1
while [ $i -le 6 ]
do
useradd user$i
echo "成功创建用户 user$i"
let i++
done

#!/bin/bash :此行指定用于运行脚本的解释器,在本例中为 Bash。

i=1 :该行用值 1 初始化变量 i 。 while [ $i -le 6 ] :此行启动 while 循环,只要 i 的值小于或等于 6,该循环就会继续。

useradd user$i :在循环内, useradd 命令用于创建一个名为“user”的用户,后跟 i 的当前值。例 如,在第一次迭代中 i 为 1,因此创建的用户为“user1”。

echo "Successfully created user user$i" :此行在创建每个用户后打印一条成功消息。

let i++ :此行在每次循环迭代后将 i 的值增加 1。

测试

tail -6 /etc/passwd

举一反三

刚刚我们通过脚本创建了用户,现在我们在创建一个脚本来删除刚刚创建的用户

编写脚本

vim while.sh
#!/bin/bash
i=1
while [ $i -le 6 ]
do
userdel -r user$i
echo "成功删除用户 user$i"
let i++
done

可以看到每个用户都是有家目录的 我们删除用户的时候把家目录也删除掉

[root@localhost ~]# ls /home
hello joke ok user1 user2 user3 user4 user5 user6

总结

通过这些实例,相信你已经对while循环有了更深刻的理解和更熟练的掌握。在今后的编程实践中,希望你能灵活运用while循环,为解决各种自动化任务提供高效的解决方案。while循环的灵活性和强大功能,使其成为Shell脚本编程中不可或缺的工具。

继续探索Shell编程的其他强大功能,不断提升你的编程能力,期待你在Shell脚本编写中取得更多成就!让while循环成为你编程工具箱中的一把利器,助你在Shell编程的道路上走得更远。

 "成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子

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

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

相关文章

链动2+1模式:解锁用户留存与复购的增长密码

大家好,我是吴军,来自一家业界领先的软件开发公司,专注于为用户打造卓越的产品体验。今天,我想与大家探讨一个在我们产品运营中取得显著成效的策略——链动21模式,以及它是如何助力我们提升用户留存和复购率的。 尽管链…

Android13 WMS窗口层级树

1,认识层级树 可以通过dumpsys activity containers 看到 WMS 层级树的结构 ACTIVITY MANAGER CONTAINERS (dumpsys activity containers) ROOT typeundefined modefullscreen override-modeundefined requested-bounds[0,0][0,0] bounds[0,0][1440,2960]#0 Displa…

中国能源统计年鉴(1986-2023年)

数据年份:1986-2023年,无1987、1988、1990三年,1991-2023年齐 数据格式:pdf、excel 数据内容:《中国能源统计年鉴》是一部反映中国能源建设、生产、消费、供需平衡的权威性资料书。 共分为7个篇章:1.综合&a…

51-52Windows密码安全性测试与Windows提权

目录 Windows密码安全性测试 一、本地管理员密码如何直接提取 1、直接通过mimikatz读取管理员密码 2、使用laZagne工具读取管理员密码 二、利用Hash远程登录系统 window提权 三、远程webshell执行命令解决 不能执行原因: 解决方法:单独上传cmd.e…

linux系统cpu飙高如何排查

1.通过top命令查看cpu占比较高的进程ID 2.通过top -H -p <进程ID>命令查看该进程中具体线程&#xff0c;可以看到第一个线程 4311 占用了88.2%的cpu 3.通过 printf "%x\n" <线程ID> 把10进制的线程id转为16进制 4.通过jstack <进程ID> | grep &…

【大疆pocket3】到手后5个必改初始设置关键点(下)

【大疆pocket3】到手后5个必改初始设置关键点&#xff08;下&#xff09; 一&#xff0c;简介二&#xff0c;必改关键点2.1 数字变焦2.2 慢动作拍摄2.3 神奇的小摇杆2.4 云台模式使用方法&#xff08;默认增稳模式和俯仰角锁定的差异化以及使用场景&#xff09;2.5 云台转向速度…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《基于已知电网场景分段拟合智能体智能评估与自主进化方法 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

为什么 JakeWharton 建议:App 只要用到一个 Activity ?

我们来看看这条回答都提到了哪些内容&#xff0c;对 Activity 和 Fragment 之间的爱恨情仇有何独到的见解&#xff0c;凭什么能得到 JakeWharton 本尊的青睐有加。 因为 Activity 是一个程序入口。你可以将其视为 app 的一个 main 函数。站在用户的立场上&#xff0c;通常你进入…

cesium 包络线

cesium 包络线 以下为源码直接复制可用 1、实现思路 通过turf.js中union方法来计算包络线官方地址:https://turfjs.fenxianglu.cn/ 闪烁线请查看cesium轨迹线(闪烁轨迹线) 2、示例代码 <!DOCTYPE html> <html lang="en"&g

Vue3中使用el-table遇到的问题

我在使用element-plus中el-table组件的时候&#xff0c;对于某一<el-table-column>标签内的内容设置show-overflow-tooltip属性&#xff0c;但这里溢出展示的tooltip的默认样式是无法像el-tooltip标签那样&#xff0c;直接可以修改的。默认的样式是这样&#xff1a; 因此…

1.树莓派4b+ubuntu18.04(ros版本melodic)+arduino mega自制两轮差速小车,实现建图导航功能

第一篇先介绍材料准备、环境配置和ros的安装 1.材料准备 1.树莓派4b&#xff0c;8g版本 2.arduino mega 3.MG310编码电机*2 4.雷达ydlidar X3 5.Tb6612电机驱动板 6.12v电池 7.ubuntu18.04ros melodic版本 2.环境配置 树莓派安装ubuntu18.04版本 ubuntu18.04版本的镜像可以…

安装vue时候发现npm淘宝镜像不能使用,报出:npm.taobao.org和registry.npm.taobao.or

2024.3.12 安装vue时候发现npm淘宝镜像不能使用&#xff0c;需要重新更换源&#xff0c;简单来说就是更换镜像 使用 npm config get registry 查看当前的镜像&#xff1b; npm config get registry 使用npm config set registry http://mirrors.cloud.tencent.com/npm/ &…

食品预包装:舌尖安全的第一道防线

在当今快节奏的生活中&#xff0c;食品预包装不仅是保护食品的屏障&#xff0c;更是传递品质与美味的使者。 预包装首先展现出的是其保鲜的魔力。它宛如一层坚固的护盾&#xff0c;有效地阻隔外界因素对食品的侵蚀&#xff0c;让食品的新鲜度和口感得以长久保存。无论是酥脆的点…

对接Shopify电商平台的流程

对接Shopify平台的流程通常包括以下关键步骤&#xff0c;在整个对接过程中&#xff0c;需要密切关注Shopify的API使用限制、认证机制、数据隐私政策等&#xff0c;确保应用的安全性和合规性。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合…

广东信息工程职业学院2024年成人高等继续教育招生简章

一、学校简介 广东信息工程职业学院位于广东省肇庆市&#xff0c;是一所具有一定办学规模&#xff0c;办学定位和培养目标明确&#xff0c;办学特色和追求鲜明&#xff0c;可持续发展的全日制普通高等学校&#xff0c;学院坚持以人为本&#xff0c;以德育人&#xff0c;以良好…

使用Jetpack Compose创建自定义可滚动网格

使用Jetpack Compose创建自定义可滚动网格 Jetpack Compose是Android开发中的现代UI工具包&#xff0c;极大地简化了界面构建过程。本文将介绍如何使用Jetpack Compose创建一个可滚动的网格布局&#xff0c;帮助开发者更高效地管理大量数据和动态内容。我们将通过示例代码详细…

▶《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch5 蒙特卡洛方法【model-based ——> model-free】

PPT 截取必要信息。 课程网站做习题。总体 MOOC 过一遍 1、视频 学堂在线 习题 2、 过 电子书 是否遗漏 【下载&#xff1a;本章 PDF GitHub 页面链接 】 【第二轮 才整理的&#xff0c;忘光了。。。又看了一遍视频】 3、 过 MOOC 习题 看 PDF 迷迷糊糊&#xff0c; 恍恍惚惚。…

【Python/Pytorch 】-- SVM算法

文章目录 文章目录 00 写在前面01 SVM算法简介02 SVM算法的基本原理线性SVM非线性SVM 03 基于Python 版本的SVM算法04 优化目标表达式理解&#xff1a;05 约束条件表达式理解 00 写在前面 SVM算法可以结合鲸鱼算法、飞蛾扑火算法、粒子群算法、灰狼算法、蝙蝠算法等等各种优化…

OpenAPI

大家好我是苏麟 , 今天带来一个前端生成接口的工具 . 官网 : GitHub - ferdikoomen/openapi-typescript-codegen: NodeJS library that generates Typescript or Javascript clients based on the OpenAPI specification 安装命令 npm install openapi-typescript-codegen --sa…

数据分析:微生物组差异丰度方法汇总

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 微生物数据具有一下的特点&#xff0c;这使得在做差异分析的时候需要考虑到更多的问题&…