SHELL脚本之循环语句的for循环以及中断循环的语句

循环应用

一.循环介绍

重复

for,while,until,

循环:

1.循环的开始条件

2.循环的操作

3.循环的结束条件

二.for循环的使用

注意:for循环读取文件区分行时,会按照换行符,空白字符区分行。

语法1:

for 变量 in 取值列表;do

执行的操作

执行的操作

done

语法2:

for 变量 in 取值列表

do

执行的操作

执行的操作

done

这里的取值列表可以是多个数字,多个IP地址,等多个数据

多个数据之间用空格隔开

在shell脚本中使用循环的目的。

第一个是执行相同的操作,一定的次数。

第二个是在执行循环的时候,将变量在取值列表中获取的值,代入到执行的操作。

在取值列表中不同的数字可以用空格隔开

在取值列表中连续的数字可以使用seq命令来获取连续的数字。

如上图所示,是seq工具获取1到5的连续数字

如上图所示,使用seq工具,然后写一个起始数字,一个结束数字,

如上图所示,使用seq工具,起始数字,步长,结尾数字。(步长即数字的间隔)

如上图所示,就是在shell脚本中使用seq工具来提供取值列表的中数据的操作。

案例1:创建测试文件的脚本

脚本名称  目录名称

在指定目录中创建20个随机数命名的文件

即touch命令重复执行20次。

如上图所示,在Linux操作系统中可以使用openssl rand -hex 10来获取随机数。

如上图所示,首先我们统计用户执行脚本的时候所使用的参数个数,-ne是不等于的意思。

随后当用户所引用的参数个数不等于1的时候,执行if语句,退出脚本

当用户所引用的参数等于1的,条件为假,不执行if语句,

随后使用if语句判断目录是否存在,

如果用户输入的目录存在则条件为假,不创建目录

随后使用for 循环,取值列表由seq命令提供的1-20

创建$1目录下的20个文件,文件名称是10位的随机数。

如上图所示,是创建测试文件的脚本。

案例2:批量创建用户user1……user20

如上图所示,就是shell脚本中批量创建用户的脚本。

案例3:批量创建用户user01---user20

如上图所示,这是shell脚本中批量创建用户的操作,

创建的用户是user01到user20

如上图所示,seq命令加上-w的选项,就会出现如上的数字。

案例4:批量创建用户

fou循环读取文件内容的时候,一个是按照换行符区分行,一个是按照空白字符区分行。

如上图所示,也可以把一个文件的内容作为for循环的取值列表来使用。

如果某一行中有空白的话,那么这一行数据,就会被划分成多个部分。

如上图所示,就是将一个文件内容作为for循环取值列表的操作。

案例5:检测在线主机(启动多线程加快脚本执行速度。)

如上图所示,获取所有在线的IP地址,即使用ping 命令,当能ping通的时候,主机就在线。

如上图所示,为了加快脚本的执行效率,-c的意思是发送一次请求,-w的意思是等待一秒。

如上图所示,这是检测同一网段内,有那些IP在线。

如上图所示,对于一个脚本,我们可以使用CTRL+z将这个脚本扔到后台去,然后使用jobs -l来查看当前机器的后台有那些进程正在停止,可以使用kill 加上进场的PID把这个进程杀掉。

如上图所示,为了加快脚本的执行速度,可以在shell脚本中启动多线程的方式。即这254个IP地址交给254个线程,然后同时去ping,最后的wait的意思是等待的意思,即必须等这254个IP地址都ping完以后,这个脚本才能结束。

案例6:实现文件批量重命名

如上图所示,我现在有一个需求,要把这个目录中所有以.txt结尾的文件修改成以.mp3结尾的文件。

如上图所示,可以使用find命令来查看目录中需要操作的文件名称,并且find命令中一个结果占用一行,可以将find命令的结果,作为for循环的取值列表。

对于这个文件名重命名的操作可以做字符串截取也可以做字符串替换。

如上图所示,就是shell中的字符串截取的效果。 

如上图所示,就是shell中的字符串替换。首先把变量名/旧的字符串/新的字符串

如上图所示,就是shell脚本中字符串的替换操作,将变量中的/旧字符串/新字符串

完成变量中字符串的替换。

如上图所示,将find命令的结果当作取值列表。

如上图所示,就是在脚本中对字符串进行替换。即对文件重命名的操作。

如上图所示,就是变量名/旧字符串/新字符串

进而完成字符串的替换。

案例7:在进行cp操作之后,检测文件差异(要么是少文件,要么是文件中的内容有差异)

如上图所示,需要根据bj目录为原版,检测sh目录中的文件是否有差异。

 

如上图所示,可以使用md5sum 文件名称

出来的效验码

来检测两个文件内容是否有差异。

三.中断循环的语句(肯定是满足一定的条件之后,才会触发中断循环的语句。也就是说中断循环的语句必须要和条件判断一起使用。)

continue

中断本次循环,立即开始下一次循环

如上图所示,就是关于continue的一个使用。即跳过满足特定条件的循环,直接进入下一次循环。

break

中断整体循环

如上图所示,就是当满足特定条件的时候,执行break语句,直接跳出循环。

案例:获取在线的同网段主机的IP地址及MAC地址

当遇到192.168.183.10的IP地址的时候,直接continue把这个IP地址跳过,因为这个IP地址是本地机器的IP地址。

如上图所示,可以使用arp命令在检测能否于指定IP的机器进行通信的同时,还能返回这台机器的正在通信的网卡的MAC地址。

如上图所示,是arp命令的帮助。

如上图所示,是使用arp命令去于IP地址为192.168.183.1的机器通信,并获取这个机器这个IP的网卡的MAC地址。

是在于指定IP机器通信成功之后,去获取这个机器的MAC地址。

如上图所示,就是对脚本的编写,这个脚本可以实现对192.168.183.0这个网段中的IP地址挨个通信,并且获取能通信的机器的网卡的MAC地址。

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

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

相关文章

计算力学|采用python进行有限元模拟

从abaqus输出的inp文件中读取节点和单元信息 import meshio mesh meshio.read(Job-3.inp) coords mesh.points###coords即为各个节点的坐标 Edof mesh.cells_dict[triangle]#Edof为三角形单元的节点号 1.单元刚度矩阵 def element_stiffness(n1,coords,E,v,t): node1 c…

UNIX网络编程-传输层

概述 传输层主要包括:TCP、UDP、SCTP(流控制传输协议)! 绝大多数客户端/服务器网络应用都使用TCP/UDP。SCTP是一个较新的协议,最初设计用于跨因特网传输电话信令。 这些传输协议都转而使用网络协议IP:或是…

pip3安装报error: externally-managed-environment,删除EXTERNALLY-MANAGED即可

pip3 install pandas 安装报错完美解决 解决方法: 1、本地终端查询EXTERNALLY-MANAGED find / -name EXTERNALLY-MANAGED 2、删除EXTERNALLY-MANAGED 记得路径改成自己本地的 sudo mv /usr/local/Cellar/python3.13/3.13.0_1/Frameworks/Python.framework/Versi…

机器视觉系统硬件组成之工业相机篇

工业相机是一种非常重要的机器视觉器件,它能够将被采集的图像信息通过电路转换成电信号,再通过模数转换器(ADC)将其转化为数字信号,最后以标准的视频信号输出。工业相机在机器视觉领域得到了广泛应用,包括质…

百易云资产管理运营系统 ufile.api.php SQL注入漏洞复现

0x01 产品描述: 百易云资产管理运营系统,是专门针对企业不动产资产管理和运营需求而设计的一套综合解决方案。该系统能够覆盖资产的全生命周期管理,包括资产的登记、盘点、评估、处置等多个环节,同时提供强大的运营分析功能&#…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十六集(上篇):制作更多地图,更多敌人,更多可交互对象

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、第一个代表性场景 1.制作敌人僵尸跳跳虫更多敌人2.制作敌人阿斯匹德更多可交互对象3.制作敌人孵化虫和它的孩子二、第二个代表性场景 1.制作更多敌人2.制作…

0x2E service

0x2E service 1. 概念2. Request message 数据格式3. Respone message 数据格式3.1 正响应格式3.2 negative respone codes(NRC)4. 示例4.1 正响应示例:4.2 NRC 示例1. 概念 UDS(Unified Diagnostic Services)中的0x2E服务,也称为WriteDataByIdentifier(通过标识符写入数据…

spring-boot学习(2)

上次学习截止到拦截器 1.构建RESfun服务 PathVariable通过url路径获取url传递过来的信息 2.MyBatisPlus 第三行的mydb要改为自己的数据库名 第四,五行的账号密码改成自己的 MaooerScan告诉项目自己的这个MyBatisPlus是使用在哪里的,包名 实体类的定义…

专家系统简介

本文对基于规则的专家系统进行简介,举例专家系统的结构类似 MYCIN 系统,同时串联介绍专家系统的各种思想。需要注意的是,本文所述仅是专家系统的一种实现途径,其依赖规则进行知识表示和推理,另外还有基于语义网络、框架…

穿越沙漠问题

题目:一辆吉普车穿越1000km的沙漠。吉普车的总装油量为500L,耗油率为1L/km。由于沙漠中没有油库,必须先用这辆车在沙漠中建立临时油库。若吉普车用最少的耗油量穿越沙漠,应在哪些地方建立油库,以及各处存储的油量是多少…

链动2+1芸众商城421+全插件独立版源码

芸众商城最新全插件421个,去授权 源码全开源链动21商城小程序 这套版本插件全部都是新版本,并非外面那种老版本 老插件全部都不能用的,一堆bug问题,我们插件源码是直接打官方授权源码所以都是最新的,还有很多小程序前…

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey阅读笔记

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey 综述阅读笔记 仅记录个人比较感兴趣的部分 基本知识 PEFT的三种分类:additive, selective, reparameterized, and hybrid fine-tuning selective fine-tuning 不需要任何额外的参数&am…

计算机毕业设计Hadoop+Hive+Spark+Flink广告推荐系统 广告预测 广告数据分析可视化 广告爬虫 大数据毕业设计 深度学习 机器学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 专业 小四号宋体 班级 小…

《环境感知方案:探索未来智能世界的关键技术》

《环境感知方案:探索未来智能世界的关键技术》 一、环境感知方案的研究现状(一)机器人领域的环境感知(二)农业领域的环境感知(三)智能网联汽车领域的环境感知 二、先进的环境感知技术&#xff0…

A Multi-Head Reconstruction Network For Image Anomaly Detection创新点总结

创新点解析:Multi-Head Reconstruction Network (MRN) 与 Multi-Feature Aggregation (MFA) 1. Multi-Head Reconstruction Network (MRN) 传统重建方法的过程: 训练自动编码器或生成模型来重建正常样本的图像。通过比较原始图像和重建图像来检测异常…

数据结构与算法 - 树 #数的概念 #二叉树 #堆 - 堆的实现/堆排序/TOP-K问题

文章目录 前言 一、树 (一)、概念 1、树的定义 (二)、树的定义 1、树为什么是递归定义的? 2、如何定义树(如何表达一棵树) 解决方案一:假设我们得知该树的度 解决方案二:顺序表 解决方案三:左孩子右兄弟表示法 二、二叉…

Linux Ubuntu dbus CAPI ---- #include<dbus.h>出现“无法打开源文件dbus/xxx.h“的问题

一、确保已安装dbus库和CAPI sudo apt-get install libdbus-1-dev 二、在c_cpp_properties.json的includePath中是否配置了dbus库依赖文件所在的路径 三、编译一个简单的dbus代码,在编译过程中只要出现.h文件找不到的情况,就使用下列命令找到.h文件路径…

Java集合常见知识总结(中)

Set Comparable 和 Comparator 的区别 Comparable 接口和 Comparator 接口都是 Java 中用于排序的接口,它们在实现类对象之间比较大小、排序等方面发挥了重要作用: Comparable 接口实际上是出自java.lang包 它有一个 compareTo(Object obj)方法用来排序…

【web】JDBC

项目连接数据库 右侧导航栏找到databsae 如果没有驱动,先下载驱动 填写数据库用户名密码 勾选对应的表即可 JDBC代码流程 1,配置信息 2,加载驱动 从MySQL Connector/J 5.1版本开始,推荐使用com.mysql.cj.jdbc.Driver这个新的驱动类。 3,链接数据库…

初识Linux · 重定向和缓冲区

目录 前言: 预备知识 缓冲区 重定向 前言: 其实有了文件2的预备知识,我们已经初步了解了文件描述符fd是什么,底层是如何运作的了,那么本文,我们通过文件描述符对重定向和缓冲区有一个更深层次的理解&a…