[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模式,以及它是如何助力我们提升用户留存和复购率的。 尽管链…

【异常错误】ValueError: rdkit.Chem.rdchem.BondType.DATIVE is not in list

在处理MoleculeNet_datasets的HIV数据集的时候出现了下面的错误&#xff1a; 35275 35276 35277 35278 Traceback (most recent call last): File "data/MoleculeNet_datasets/splitters.py", line 283, in <module> dataset MoleculeDataset(f{data_path}, d…

(新)Spring Security如何实现跨域

浏览器出于安全的考虑&#xff0c;使用 XMLHttpRequest对象发起 HTTP请求时必须遵守同源策略&#xff0c;否则就是跨域的HTTP请求。 默认情况下是被禁止的。 同源策略要求源相同才能正常进行通信&#xff0c;即协议、域名、端口号都完全一致。 前后端分离项目&#xff0c;前端…

Android13 WMS窗口层级树

1&#xff0c;认识层级树 可以通过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年)

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

论文学习_多平台二进制代码分类与相似性检测技术研究

0. 摘要 研究背景:二进制代码分类与相似性检测是恶意代码家族分析、软件代码溯源的基础,对保障网络空间安全具有重要作用。 现存问题:在多种平台下,二进制代码包括 PE、ELF、DEX 等形态的文件格式,并设计 X86、ARM、MIPS、PPC 等指令架构。而在同一平台下,同一份软件代…

excel按模板文件导出多个文件并压缩为ZIP格式返回前端

思路&#xff1a;先准备好模板文件和与之对应的实体类&#xff0c;数据库数据等&#xff0c;还是之前思路&#xff0c;根据查出的数据&#xff0c;填充模板文件&#xff0c;生成一个临时文件&#xff0c;最后将这些个临时文件打包为zip返回前端&#xff0c;并将多个临时文件删除…

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

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

计算机专业如何自学?经验交流分享

想自学计算机的小伙伴一定要学会自己找信息&#xff0c;然后制定自己的学习计划去好好执行下去&#xff0c;要不然永远都是停留在想的阶段&#xff0c;找了一大堆资料&#xff0c;却永远不真正开始学习&#xff0c;这样的话&#xff0c;估计给你再多的时间也没法入门&#xff0…

MPI 介绍MPI 全名叫 Message Passing Interface,

一、MPI 介绍 MPI 全名叫 Message Passing Interface&#xff0c;即信息传递接口&#xff0c;作用是可以通过 MPI 可以在不同进程间传递消息&#xff0c;从而可以并行地处理任务&#xff0c;即进行并行计算。需要注意的是&#xff0c;尽管我们偶尔会说使用 MPI 编写了某某可执…

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

带你学习Mybatis之mybatis的sql节点

mybatis的sql节点 mybatis的mapper映射文件中的sql节点在初始化时会被解析成MappedStatement对象&#xff0c;其中sql语句会被解析为SqlSource对象&#xff0c;sql语句中定义的动态sql节点、文本节点等则由SqlNode接口的相应实现类表示 SqlSource public interface SqlSource {…

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版本的镜像可以…

Java中如何正确使用异常处理?

Java中如何正确使用异常处理&#xff1f; 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在Java编程中&#xff0c;异常处理是确保程序稳定性和可靠性的重要部分…

【java】写一个发送邮箱的样例

【java】写一个发送邮箱的样例package com.ai157.aigc.controller.methods; import javax.mail.*; import javax.mail.internet.*; import java.util.Date; import java.util.Properties;public class SendEmail {/* public static void main(String[] args) {toMsg("3…