[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.rhkb.cn/news/357547.html

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

相关文章

Go语言的诞生背景

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

Spark Core内核调度机制详解(第5天)

系列文章目录 如何构建DAG执行流程图 (掌握)如何划分Stage阶段 (掌握)Driver底层是如何运转 (掌握)确定需要构建多少分区(线程) (掌握) 文章目录 系列文章目录引言一、Spark内核调度(掌握)1.1、内容概述1.2、RDD的依赖1.3、DAG和Stage1.4、Spark Shuffl…

云计算 私有云openstack 搭建指导 【99%成功率】

本人已经搭了很多次,也失败了很多次,这里面有很多失败的经验,以及提示,请按提示搭建,相信你也可以的! 不积小流无以成江海,多尝试才能吸取经验 开始搭建openstack 准备文件(如果没有…

练手代码之使用Python实现合并PDF文件

如果你有合并PDF的需要,你会怎么办 我们无所不能的程序员会选择写一个Python代码来实现(谁会这么无聊?是我),如果真的有PDF操作需要,我推荐你使用PDF Expert这个软件哈~ 话不多说直接上代码: …

Pip换源秘籍:让你的Python包飞行起来!

在Python的包管理中,Pip是最重要的工具之一。它允许开发者从Python Package Index (PyPI)安装包,但有时由于网络问题或服务器负载过高,直接从PyPI安装包可能会非常慢。这时,更换Pip源到一个更快的镜像站点是一个常见的解决方案。本…

版本控制工具-git的基本使用

目录 前言一、git简介二、git工作流程三、git基本命令3.1 创建本地仓库3.2 将工作区内容提交到本地仓库3.3 将本地仓库内容推送到远程仓库 前言 本篇文章介绍git的一般工作流程 一、git简介 Git是一个开源的分布式版本控制软件,常用于项目的版本管理 Git是Linux …

破碎的像素地牢探险:游戏分享

软件介绍 《破碎的像素地牢》是开源一款地牢冒险探索类的游戏,融合了日系RPG经典风格,玩家将控制主角进行未知场景的探索。除了经典地牢玩法外,游戏还添加了更多创意内容,如黑屏状态前的挑战性等,使得游戏更加富有挑战…

AI智能时代:ChatGPT如何在金融市场发挥策略分析与预测能力?

文章目录 一、ChatGPT在金融策略制定中的深度应用客户需求分析与定制化策略市场动态跟踪与策略调整策略分析与优化 二、ChatGPT在算法交易中的深度应用自动交易策略制定交易执行与监控风险管理 三、未来展望《智能量化:ChatGPT在金融策略与算法交易中的实践》亮点内…

Windows10中端口被占用处理方法

前言 在Windows 10中,查看端口被占用情况的方法主要依赖于命令行工具netstat。以下是详细步骤,以及必要的解释和归纳: 打开命令提示符 方法1:使用快捷键Win R,打开“运行”对话框,输入cmd,然…

Linux 进程管理

一、查看进程 使用ps -aux进行查看,其中a表示列出所有进程信息,u以用户格式显示进程信息,x显示后台进程参数,也可以使用| grep 进行进程的筛选 以下是显示进程后的示意 USER为进程执行的用户 PID为进程号 %CPU为该进程的cpu占用…

如何解决vue中的路由守卫失效问题

引言 1. 路由守卫简介 路由守卫是前端开发中一个至关重要的概念,特别是在使用单页应用(SPA)框架如React、Vue或Angular时。它们充当了SPA中的“门卫”,控制着用户对不同页面的访问权限。路由守卫的核心功能是确保用户在访问特定…

挖矿宝藏之开发者模式

目录 一、开发者模式简介 二、启动方式 三、元素(Elements) 四、控制台(Console) 五、来源(Sources) 六、网络(Network) 七、性能(Performance) 八、…

Day10—Spark SQL基础

Spark SQL介绍 ​ Spark SQL是一个用于结构化数据处理的Spark组件。所谓结构化数据,是指具有Schema信息的数据,例如JSON、Parquet、Avro、CSV格式的数据。与基础的Spark RDD API不同,Spark SQL提供了对结构化数据的查询和计算接口。 Spark …

react18 实现具名插槽

效果预览 技术要点 当父组件给子组件传递的 JSX 超过一个标签时,子组件接收到的 children 是一个数组,通过解析数组中各 JSX 的属性 slot ,即可实现具名插槽的分发! 代码实现 Father.jsx import Child from "./Child";…

OGG几何内核开发-复杂装配模型读取、显示、分析

OGG几何内核读取STEP模型文件的API有STEPCAFControl_Reader、STEPControl_Reader。 STEPCAFControl_Reader使用很复杂,但可以展示装配树,有利于模型的详细分析。 本文演示了《插件化算法研究平台V2》的OCC几何模型插件的部分功能:显示装配树…

Golang | Leetcode Golang题解之第172题阶乘后的零

题目: 题解: func trailingZeroes(n int) (ans int) {for n > 0 {n / 5ans n}return }

pytets测试框架中如果需要运行多个测试套件时pytest.ini文件设置

pytets测试框架中如果需要运行多个测试套件时pytest.ini文件设置方法 testpaths testcases/fenmi testcases/weixin testcases/Zgen

QT实现人脸识别

QT实现人脸识别 Face.pro文件: QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # d…

【MATLAB】(高数)

参考文章 函数极限 导数与偏导 极值和最值 局部范围的最值 局部范围内的最值,相当于函数的极值 离散数据的最值 多元函数的极值 fminunc [x, fval] fminunc(fun, x0)fun为代求极值的函数;x0为起始点,即从这个点开始寻找极值,…

数据结构9——排序

一、冒泡排序 冒泡排序(Bubble Sort),顾名思义,就是指越小的元素会经由交换慢慢“浮”到数列的顶端。 算法原理 从左到右,依次比较相邻的元素大小,更大的元素交换到右边;从第一组相邻元素比较…