[Shell编程学习路线]——for循环应用技巧 语法和案例

🏡作者主页:点击! 

🛠️Shell编程专栏:点击!

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

🀄️文章质量:96分


目录

————前言————

for 循环语句

基本结构

图示原理

for循环实例

测试

举一反三

实例(ping)

总结


————前言————

在Shell编程中,for循环是一个强大且常用的控制结构,可以极大地简化任务的自动化处理。无论是批量处理文件、执行重复性任务,还是实现复杂的逻辑控制,for循环都能提供高效且灵活的解决方案。在这篇文章中,我们将深入探索for循环的多种应用技巧,通过具体实例帮助你掌握其在实际编程中的妙用。不论你是Shell编程的新手还是有经验的开发者,这里都有适合你的实用技巧,助你在Shell脚本编程的道路上更进一步。

当面对各种列表重复任务时,使用简单的if语句已经难以满足要求,而顺序编写全部代码更是显得异常烦 琐、因难重重,学习的for循环语句,可以很好地解决类似问题。

for 循环语句

for 循环是Shell脚本中用于遍历列表、数组或文件的重要工具。它通过指定一个变量和一组值,依次将 每个值赋给变量,并执行相应的命令块。这使得在Shell中能够方便地处理多个文件、目录或其他数据 集,用于自动化任务和批处理操作。

基本结构

for 变量名 in 取值列表
do
执行的命令
done

`for 变量名 in 取值列表`: 这部分定义了循环的结构。`变量名` 是用来存储列表中当前值的变量名。`取 值列表` 是一个用空格分隔的列表,可以是具体的数值、字符串、文件名列表等。

`do`: 表示循环开始,后面紧跟着要执行的命令块。 `执行的命令`: 在每次循环迭代时执行的命令或命令块。可以是任意Shell命令,通常使用`变量名` 来访问 当前循环迭代中的值。 `done`: 表示循环体的结束。

它的作用是依次将列表中的每个值赋给变量名,并执行相应的命令块,直到列表中的所有值都被处理完 毕。

图示原理

for循环实例

实例 1.根据文档中的姓名去创建用户 并设置密码为123456 编写脚本 user.sh

vim user.sh
#!/bin/bash
#2024-6-13-13-57-35
for i in `cat user.txt`
do
useradd $i
echo '123456' | passwd --stdin $i &> /dev/null
done

添加人员名单

vim user.txt
wangwu
zhangsan
lisi
smqnz

测试

bash user.sh //执行脚本
tail -4 /etc/passwd //查看是否成功

举一反三

通过上述实验 我们根据文本创建用户,现在我们根据文本删除用户 编写脚本内容

#!/bin/bash
for i in `cat user.txt`
do
userdel -r $i
echo "用户$i 删除成功"
done

可以看到家目录已经删除成功说明用户也是删除成功

实例(ping)

题目要求编写一个脚本,根据给定的IP地址列表,检查每个主机的状态。这意味着脚本需要能够逐个Ping 每个IP地址,并显示每个主机是否可达。 第一步创建IP地址列表 第二步编写脚本 第三步执行并测试

vim ip.txt192.168.93.1 
192.168.93.2 
192.168.93.111 
192.168.93.11

编写脚本
 

vim ip.sh
#!/bin/bash
for i in `cat ip.txt`
do
ping -c 3 -i 0.2 -W 3 $i &> /dev/null
if [ $? -eq 0 ];then
echo "$i is up"
else
echo "$i is down"
fi
don

解释如下

for i in \cat ip.txt`: 使用 cat命令读取ip.txt 文件中的每一行,每一行一个IP地址。反引号 \ ` 用于命令替换,将 cat ip.txt 的输出作为 for 循环的输入。

ping -c 3 -i 0.2 -W 3 $i &> /dev/null: 对每个IP地址 $i 执行Ping命令:

-c 3: 发送3个ICMP包。

-i 0.2: 设置ICMP包的发送间隔为0.2秒。

-W 3: 设置超时时间为3秒。

&> /dev/null: 将Ping命令的所有输出重定向到 /dev/null,即丢弃所有输出,只关注命令的返回状态。

if [ $? -eq 0 ]; then ... fi: 检查上一条命令的返回状态: $? 是上一个命令的退出状态码,Ping命令成功返回0,失败返回其他值。

如果返回状态为0,输出 "$i is up",表示主机可达。

如果返回状态不为0,输出 "$i is down",表示主机不可达或Ping超时。

总结

通过本文的学习,我们详细探讨了Shell编程中for循环的多种应用场景和技巧。从基本的语法结构,到复杂的文件处理和数据操作,for循环展示了其在Shell脚本中的强大功能。我们不仅了解了如何使用for循环遍历列表、文件内容,还学会了在实际项目中应用这些知识以提高脚本的效率和可维护性。

通过这些实例,相信你已经对for循环有了更深刻的理解和更熟练的掌握。在今后的编程实践中,希望你能灵活运用for循环,为解决各种自动化任务提供高效的解决方案。Shell脚本的魅力在于其简洁和强大,for循环作为其中的重要工具,定会成为你编程道路上的得力助手。

继续探索Shell编程的其他强大功能,不断提升你的编程能力,期待你在Shell脚本编写中取得更多成就

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

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

神秘泣男子

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

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

相关文章

【启明智显产品分享】Model3工业级HMI芯片详解系列专题(三):安全、稳定、高防护

芯片作为电子设备的核心部件,,根据不同的应用领域被分为不同等级。工业级芯片适用于工业自动化、控制系统和仪器仪表等领域,对芯片的安全、稳定、防护能力等等有着较高的要求。这些芯片往往需要具备更宽的工业温度范围,能够在更恶…

分布式锁三种方案

基于数据库的分布式锁(基于主键id和唯一索引) 1基于主键实现分布式锁 2基于唯一索引实现分布式锁 其实原理一致,都是采用一个唯一的标识进行判断是否加锁。 原理:通过主键或者唯一索性两者都是唯一的特性,如果多个…

抉择与未来:高考后专业与学校的深度选择思考

引言 随着2024年高考的尘埃落定,数百万考生及其家庭正面临一个至关重要的决策:在有限的分数条件下,是优先选择专业还是学校?这一选择不仅影响着个人的未来职业道路,也关系到大学生活的质量和个人综合素质的培养。本文将…

【单片机】DS2431芯片,读写128个字节,程序

ds2431pt&r stm32读写程序&#xff1a; 部分程序&#xff1a; #include "sys.h" #include "delay.h" #include "usart.h"#include <stdio.h> #include <stdlib.h> #include <string.h>#include "sys.h" #incl…

openEuler搭建hadoop Standalone 模式

Standalone 升级软件安装常用软件关闭防火墙修改主机名和IP地址修改hosts配置文件下载jdk和hadoop并配置环境变量配置ssh免密钥登录修改配置文件初始化集群windows修改hosts文件测试 1、升级软件 yum -y update2、安装常用软件 yum -y install gcc gcc-c autoconf automake…

【APP_汽修宝】数据采集案例APP_数据解密分析

如果不会写代码&#xff0c;那就出书、写博客、做视频、录播客。 &#x1f4da; S35赛季末王者昭君罗 关键代码定位 使用方法【逆向-快速定位关键代码】通过hook常用函数HashMap方法 动态分析 下面是我们通过访问目标页面时 Frida hook 捕获HashMap的调…

Linux下手动修改服务器时间(没网环境下)

在客户服务器上更新程序时&#xff0c;发现服务器时间不对&#xff0c;现在应该是下午13:44:00&#xff0c;但服务器却显示为&#xff1a;21:40:53&#xff0c;所有是不对的。 date解决办法&#xff1a; 1、由于服务器是没有网的&#xff0c;只能手动设置时间&#xff0c;输入…

idea-Spring框架与ioc容器

Sping是轻量级的开源J2EE框架&#xff0c;可以解决企业应用开发的复杂性 Spring有两个核心部分为Ioc和AOP Ioc:控制反转&#xff0c;吧创建对象过程交给Sping进行管理 AOP:面向切面&#xff0c;不修改代码进行功能增强 创建Maven项目 IDEA-2024 就直接创建java项目即可 创…

Android WebSocket长连接的实现

一、为什么需要 WebSocket 初次接触 WebSocket 的人&#xff0c;都会问同样的问题&#xff1a;我们已经有了 HTTP 协议&#xff0c;为什么还需要另一个协议&#xff1f;它能带来什么好处&#xff1f; 答案很简单&#xff0c;因为 HTTP 协议有一个缺陷&#xff1a;通信只能由客…

SpringBoot引入外部依赖包

将需要引入的文件放置到与src同级别的目录下 如上&#xff0c;在src的同级&#xff0c;新建了一个lib目录&#xff0c;将jar包放置其中 在POM文件下&#xff0c;加入如下配置 <dependency><groupId>com.aliyun</groupId><artifactId>com.aliyun.filed…

搭建取图系统app源码开发,满足广泛应用需求

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 图片已成为信息传递的重要媒介&#xff0c;广泛应用于各个领域。为满足日益增长的图片需求&#xff0c;搭建一款高效的取图系统&#xff0c;可以为用户提供便捷、全面的…

windows服务器下jenkins c语言打包的一些经验share

前言 因为一些原因&#xff0c;需要从linux环境下的jenkins 打包c语言转移到使用windows环境下的jenkins打包c语言&#xff0c;从转移的过程中&#xff0c;发现了一些问题和解决方案&#xff0c;故在此和各位运维工程师分享一下。 一、windows 下的c语言编译环境配置 这边就…

中国最全的hive sql 函数集合(持续更新)

#6/20/24 增加greatest函数&#xff1a; select greatest(1,2,3,4,5,2) 结论&#xff1a;可以用hive presto spark得出正确的结果值 #6/20/24 增加last_value(cl1) ignore nulls over(order by ts ) as dt 函数&#xff1a; 有数据集&#xff1a; 1 1 1 2 2   3 3 …

模拟算法:代码世界的生活模拟器

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一. 模拟算法的总结 二. 模拟算法题目 2.1 替换所有的问号 2.2 提莫攻击 2.3 Z字形变换 2.4 外观数列 2.5 数青蛙 总结 前言 本篇详细介绍了模拟算法的使用&#xff0c;让…

自动化办公04 使用pyecharts制图

目录 一、柱状图 二、折线图 三、饼图 四、地图 1. 中国地图 2. 世界地图 3. 省会地图 五、词云 Pyecharts是一个用于数据可视化的Python库。它基于Echarts库&#xff0c;可以通过Python代码生成各种类型的图表&#xff0c;如折线图、柱状图、饼图、散点图等。 Pyecha…

【腾讯云智笔试题——分苹果时间复杂度和空间复杂度都是O(1)】

文章目录 题目描述解题思路&#xff1a;思路讲解&#xff1a; 题目描述 有m个苹果&#xff0c;n个小孩。每个小孩都有一个编号&#xff0c;小明的编号是。要尽量公平的分苹果&#xff0c;相邻编号的小孩分到的苹果数目差距不能大于1。 请问如何在满足相邻编号的小孩分到的苹果…

wsl2平台鸿蒙全仓docker编译环境快速创建方法

文章目录 1 文章适用范围&#xff1a;2 WSL环境安装3 镜像迁移非C盘4 Docker环境准备4.1 docker用户组和用户创建4.2 Docker环境配置4.2.1 Ubuntu下安装docker工具4.2.2 鸿蒙Docker环境安装4.2.3 鸿蒙全仓代码拉取编译 5 鸿蒙全仓代码的更新策略6 参考文献7 FAQ7.1 缺头文件xcr…

【0基础学爬虫】爬虫基础之自动化工具 Appium 的使用

大数据时代&#xff0c;各行各业对数据采集的需求日益增多&#xff0c;网络爬虫的运用也更为广泛&#xff0c;越来越多的人开始学习网络爬虫这项技术&#xff0c;K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章&#xff0c;为实现从易到难全方位覆盖&#xff0c;特设【0基础学…

CentOS 5(CentOS 6、Redhat 6)服务器配置VNC

一、配置服务器yum源 yum源&#xff08;本地、华为云、阿里云、网易&#xff09; 二、使用yum安装vnc服务 1、检查系统是否安装了vnc 和 vncserver&#xff0c; rpm -qa | grep vnc如果没有安装那就行自行下载安装&#xff08;我这里用yum安装了&#xff0c;vncserver安装需…

设计程序,实现高精度圆周率的计算和存储,使用线性表突破程序设计语言内置变量的数值和有效数字范围限制

一、使用线性表突破程序设计语言内置变量的数值和有效数字范围的限制&#xff0c;为了实现高精度圆周率的计算&#xff0c;先根据数学公式进行对PI高精度运算&#xff0c;如图1-1。根据这个数学公式 π2 0nn!2n1‼ 即 Rn1Rn*n2n1&#xff0c;R11&#xff0c;sum π2* n1∞Rn 来…