Linux——Shell编程之循环语句(笔记)

For循环语句

1、for语句的结构与逻辑:

    使用for循环语句时,我们需要指定一个变量以及取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量使用完退出循环。结构如下:

for 变量 in 取值列表do命令序列done

    对于for语句的操作对象——用户指定名称的变量,并通过in关键字为该变量预先设置了一个取值列表,多个取值之间以空格进行分隔。然后位于do...done之间的命令序列称为循环体,其中的执行语句需引用变量以完成相应的任务。逻辑图如下:

 2、应用示例:

(1)根据姓名列表批量添加用户
 [root@localhost ~]#vim /root/users.txt    //用于测试的列表文件
zhangsan
lisi
wangwu[root@localhost ~]#vim uadd.sh    //批量添加用户的脚本
#!/bin/bash
ULIST=$(cat /root/users.txt)for UNAME in $ULIST
douseradd $UNAMEecho    "aptech" | passwd --stdin $UNAME &>/dev/null
done[root@localhost ~]#chmod +x uaddfor.sh[root@localhost ~]#./uaddfor.sh    //测试并确认执行结果[root@localhost ~]#tail -3 /etc/passwd
zhangsan:x:... ...    //省略内容[root@localhost ~]#vim udelfor.sh    //测试并确认结果[root@localhost ~]#id zhangsan
id: zhangsan: no such user    //无此用户
(2)根据IP地址列表检查主机状态
 [root@localhost ~]#vim /root/ipadds.txt    //测试的列表文件
176.16.16.1
192.168.137.1
192.168.137.254[root@localhost ~]#vim chkhosts.sh    //循环检查各主机的脚本
#!/bin/bash
HLIST=$(cat /root/ipadd.txt)for IP in $ HLIST
doping -c 3 -i 0.2 -W 3 $IP    &> /dev/null//-c 发送包的数量;-i 发送ping包间隔;-W 超时时间
if [ $? -eq 0 ]
thenecho "Host $IP is up."
elseecho "Host $IP is down."
fi
done[root@localhost ~]#chmod +x chkhosts.sh[root@localhost ~]#./chkhost.sh    //测试并确认执行结果
Host 172.16.16.1 is down.
Host 192.168.137.1 is down.
Host 192.168.137.254 is up.

While循环语句

1、while语句的结构与逻辑:

    根据特定的条件反复执行一个命令序列,直到该条件不再满足时为止。注意避免出现死循环的情况的情况,否则之后的命令操作将无法进行。结构如下:

while 条件语句操作
do 命令序列
done

    使用while循环语句时,有两个特殊的条件测试操作,即true(真)和false(假)。使用true作为条件,条件永远成立,命令序列将无限执行;使用false作为条件,则循环体将不会被执行。这两个特殊条件也可以用在if语句的条件测试中。逻辑图如下:

 2、应用示例:

(1)批量添加规律编号的用户
[root@localhost ~]#vim uadd.sh    //批量添加用户的脚本
#!/bin/bash
PREFIX="lemon"
i=1
while [ $1 -le 20 ]
douseradd ${PREFIX}$iecho "123456" | passwd --stadin ${PREFIX}$i &> /dev/nulllet i++
done
[root@localhost ~]#chmod +x uadd.sh
[root@localhost ~]#./uadd.sh
[root@localhost ~]#grep "lemon" /etc/passwd | tail -3
lemon11:x:...    ...    //省略部分信息
[root@localhost ~]#vim /udel.sh    //批量删除用户的脚本
#!/bin/bash
PREFIX="lemon"
i=1
while [ $i -le 20 ]
douserdel -r ${PREFIX}$ilet i++
done
[root@localhost ~]#chmod +x udel.sh
[root@localhost ~]#./udel.sh    //测试并确认结果
[root@localhost ~]#id lemon20
id:lemon20:无此用户

Until 循环语句

(1)until语句的结构:

    until与while完全相反,while循环在条件为“真”是继续执行循环,而until则是在条件为假时执行循环。结构如下:

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

    until语句首先判断until后的条件测试结果,如果条件不成立,则执行do...done循环体中的命令序列;返回until后再次判断条件测试结果,如果条件仍然不成立,则继续执行循环体;再次返回到until后,判断条件测试结果...直到测试结果成立为止,跳到done语句,表示结束循环。逻辑如下:

(2)应用示例

为指定用户发送在线消息

[root@localhost ~]#vim until-user_online_to_write.sh
#!/bin/bash
#检查参数数量是否足够
if [ $# -lt 2 ];thenecho "Usage: $0 <username1> <username2> ... <message>"exit 1
fi#提取消息,消息为最后一个参数
message="${!#}"#遍历除最后一个参数外的所有用户名
for username in "${@:1:$#-1}"; do#检查用户是否为系统内用户
if ! grep -q "^$username:" /etc/passwd; thenecho "$username is not a valid user on this system."continue
fi#持续检查用户是否登录
while ! who | grep -q "$username"; doecho "$username is not logged on. Waiting for the user to log in ..."sleep 60
done#用户已登录,发送消息echo "Sending message to $username..."write "$username" <<EOF
$message
EOFif [ $? -ne 0 ] ; thenecho "Failed to send message to $username."fi
done
[root@localhost ~]#chmod +x until-user_online_to_write.sh
[root@localhost ~]#./until-user_online_to_write.sh root
//发个root自己,消息为空
Message from root@localhost on pts/0 at 16:23 ... Are you ready ? root
EOF

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

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

相关文章

【权限】v-hasPermi=“[‘monitor:job:add‘]“ 这个属性是怎么控制能不能看到这个按钮

背景&#xff1a;对于前台中通过指令对于操作按钮的控制是怎么实现的&#xff1a; <el-col :span"1.5"><el-buttontype"primary"plainicon"Plus"click"handleAdd"v-hasPermi"[system:role:add]">新增</el-bu…

ISIS路由引入

‌基本概念与作用‌ ISIS&#xff08;Intermediate System to Intermediate System&#xff09;协议的路由引入&#xff08;Route Import&#xff09;功能用于将其他路由协议&#xff08;如OSPF、BGP&#xff09;或静态/直连路由引入ISIS域&#xff0c;实现跨协议的路由信息共…

CentOS7更换国内YUM源和Docker简单应用

配置国内阿里云镜像源 ## 更新镜像源 # 1.备份 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak# 2.替换镜像源文件 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 3.生成缓存 yum clean all yum m…

常见的 14 个 HTTP 状态码详解

文章目录 一、2xx 成功1、200 OK2、204 No Content3、206 Partial Content 二、3xx 重定向1、301 Moved Permanently2、302 Found3、303 See Other注意4、Not Modified5、307 Temporary Redirect 三、4xx 客户端错误1、400 Bad Request2、401 Unauthorized3、403 Forbidden4、4…

RAG(检索增强生成)学习路径全解析:从入门到精通

引言 检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;简称RAG&#xff09;是一种结合了信息检索技术与语言生成模型的人工智能技术。它通过从外部知识库中检索相关信息&#xff0c;然后将其作为上下文输入到大语言模型&#xff08;LLM&#xff09;中&…

OpenAI为抢跑AI,安全底线成牺牲品?

几年前&#xff0c;如果你问任何一个AI从业者&#xff0c;安全测试需要多长时间&#xff0c;他们可能会淡定地告诉你&#xff1a;“至少几个月吧&#xff0c;毕竟这玩意儿可能改变世界&#xff0c;也可能毁了它。”而现在&#xff0c;OpenAI用实际行动给出了一个新答案——几天…

解决在linux下运行rust/tauri项目出现窗口有内容,但是渲染出来成纯黑问题

起因 最近折腾了一下rust/tauri程序开发&#xff0c;据说这玩意性能非常牛皮就玩了一下&#xff0c;但是我运行打包一直出现一个奇怪问题&#xff0c;窗口能正常打开&#xff0c;但是是纯黑的什么内容都没有&#xff0c;鼠标移上去又发现指针会变换&#xff08;看起来是内容又…

高并发内存池(定长内存池基础)

定长内存池的设计 定长内存池定长内存池的原理讲解代码实现定义对象New对象的主要逻辑delete对象的主要逻辑完整代码 定长内存池 为什么我们要设计这个定长内存池呢&#xff1f;首先malloc是c标准库中向堆申请空间的接口&#xff0c;变相的说malloc是普遍性&#xff0c;而我们…

【VUE3】练习项目——大事件后台管理

目录 0 前言 1 准备工作 1.1 安装pnpm 1.2 创建vue项目 1.3 Eslint & Prettier的配置 1.4 husky 提交代码检查 1.5 目录调整 1.6 VueRouter4 1.6.1 基础配置 1.6.2 路由跳转 1.7 引入 Element Plus 组件库 1.8 Pinia 1.8.1 优化 1.9 封装请求工具 1.9.1 安…

WebSocket与MQTT

在物联网&#xff08;IoT&#xff09;领域&#xff0c;​WebSocket和MQTT确实都可以实现实时通信&#xff0c;但它们的核心设计目标、适用场景和角色存在显著差异。以下是两者的对比分析&#xff1a; ​1. 协议设计初衷​ ​WebSocket​ ​目标​&#xff1a;提供浏览器与服务器…

Mysql为什么有时候会选错索引

案例 正常情况 有一个表t ( id, a , b )&#xff0c;id是主键索引&#xff0c;a是Normal索引。 正常情况下&#xff0c;针对a进行查询&#xff0c;可以走索引a 并且查询的数量和预估扫描行数是差不多的&#xff0c;都是10001行 奇怪的现象 随着时间的变化&#xff0c;后…

[250414] ArcoLinux 项目宣布逐步结束

目录 ArcoLinux 项目宣布逐步结束 ArcoLinux 项目宣布逐步结束 备受欢迎的 Arch Linux 发行版 ArcoLinux 近日宣布&#xff0c;其项目将逐步结束。ArcoLinux 以其作为 Linux 教育平台和提供多种安装选项&#xff08;从完整桌面环境到最小化基础安装&#xff09;而闻名。 核心…

opencv人脸性别年龄检测

一、引言 在计算机视觉领域&#xff0c;人脸分析是一个热门且应用广泛的研究方向。其中&#xff0c;人脸性别年龄检测能够自动识别图像或视频流中人脸的性别和年龄信息&#xff0c;具有诸多实际应用场景&#xff0c;如市场调研、安防监控、用户个性化体验等。OpenCV 作为一个强…

【NLP】 22. NLP 现代教程:Transformer的训练与应用全景解读

&#x1f9e0; NLP 现代教程&#xff1a;Transformer的训练与应用全景解读 一、Transformer的使用方式&#xff08;Training and Use&#xff09; 如何使用Transformer模型&#xff1f; Transformer 模型最初的使用方式有两种主要方向&#xff1a; 类似 RNN 编码-解码器的架…

Spring Boot 集成 RocketMQ 全流程指南:从依赖引入到消息收发

前言 在分布式系统中&#xff0c;消息中间件是解耦服务、实现异步通信的核心组件。RocketMQ 作为阿里巴巴开源的高性能分布式消息中间件&#xff0c;凭借其高吞吐、低延迟、高可靠等特性&#xff0c;成为企业级应用的首选。而 Spring Boot 通过其“约定优于配置”的设计理念&a…

HTTPS实现安全的关键方法及技术细节

HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;通过多种技术手段实现数据传输的安全性&#xff0c;其核心机制基于SSL/TLS协议&#xff0c;并结合数字证书、加密算法等技术。 SSL&#xff1a;Secure Sockets Layer&#xff0c;安全套接字层 TLS&#xff1a;…

Java【多线程】(8)CAS与JUC组件

目录 1.前言 2.正文 2.1CAS概念 2.2CAS两种用途 2.2.1实现原子类 2.2.2实现自旋锁 2.3缺陷&#xff1a;ABA问题 2.4JUC组件 2.4.1Callable接口 2.4.2ReentrantLock&#xff08;与synchronized对比&#xff09; 2.4.3Semaphore信号量 2.4.4CountDownLatch 3.小结 1…

【Docker】离线安装Docker

背景 离线安装Docker的必要性&#xff0c;第一&#xff0c;在目前数据安全升级的情况下&#xff0c;很多外网已经基本不好访问了。第二&#xff0c;如果公司有对外部署的需求&#xff0c;那么难免会存在对方只有内网的情况&#xff0c;那么我们就要做到学会离线安装。 下载安…

MecAgent Copilot:机械设计师的AI助手,开启“氛围建模”新时代

MecAgent Copilot作为机械设计师的AI助手,正通过多项核心技术推动机械设计进入“氛围建模”新时代。以下从功能特性、技术支撑和应用场景三方面解析其创新价值: 一、核心功能特性 ​​智能草图生成与参数化建模​​ 支持自然语言输入生成设计草图和3D模型,如输入“剖面透视…

MCU屏和RGB屏

一、MCU屏 MCU屏‌&#xff1a;全称为单片机控制屏&#xff08;Microcontroller Unit Screen&#xff09;&#xff0c;在显示屏背后集成了单片机控制器&#xff0c;因此&#xff0c;MCU屏里面有专用的驱动芯片。驱动芯片如&#xff1a;ILI9488、ILI9341、SSD1963等。驱动芯片里…