Shell脚本应用(三)

一、使用for循环语句

1、for语句的结构

        使用for 循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列.直到变量值用完退出循环。在这里."取值列表”称为for语句的执行条件,其中包括多个属性相同的对象,需要预先指定(如通讯录、IP黑名单).
        for 循环语句的语法结构如下所示。

for    变量名    in    取值列表

do

        命令序列

done

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

        for语句的执行流程:

 2、for语句应用实例

        1)根据姓名列表批量添加用户

        根据人事部门给出的员工姓名的拼音列表.在Linux服务器中添加相应的用户账号,初始密码均设置为“123456”。其中,员工姓名列表中的账号数量并不固定,而且除了要求账号名称是拼音之外.并无其他特殊规律。
        针对上述要求,可先指定员工列表文件 users.txt,然后编写一个名为uaddfor.sh的 Shell脚本,从users ,txt文件中读取各用户名称,重复执行添加用户、设置初始密码的相关操作。

[root@lucky u3]# vim users.txt 
zhangsan
chengxing
dengchao
luha
lancaihe[root@lucky u3]# vim useraddfor.sh
#!/bin/bash
list=$(cat /root/u3/users.txt)
for pat in $list
douseradd $patecho "123456" | passwd --stdin $pat &> /dev/null
done
[root@lucky u3]# chmod +x useraddfor.sh 
[root@lucky u3]# ./useraddfor.sh 
[root@lucky u3]# tail -10 /etc/passwd
zhangsan:x:1002:1002::/home/zhangsan:/bin/bash
chengxing:x:1003:1003::/home/chengxing:/bin/bash
dengchao:x:1004:1004::/home/dengchao:/bin/bash
luha:x:1005:1005::/home/luha:/bin/bash
lancaihe:x:1006:1006::/home/lancaihe:/bin/bash

二、使用while循环语句

1、while语句的结构

        使用 while 循环语句时,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足时为止。在脚本应用中,应该避免出现死循环的情况,否则后边的命令操作将无法执行,因此,循环体内的命令序列中应包括修改测试条件的语句,以便在适当的时候使测试条件不再成立,从而结束循环。
        while循环语句的语法结构如下所示

while        条件测试操作

do

         命令序列

done

        while语句的执行流程:首先判断while后的条件测试操作结果.如果条件成立,则执行do…done循环体中的命令序列;返回while 后再次判断条件测试结果.如果条件仍然成立,则继续执行循环体,再次返回到while后,判断条件测试结果……如此循环.直到while后的条件测试结果不再成立为止.最后跳转到done语句,表示结束循环。
        使用while 循环语句时,有两个特殊的条件测试操作.即 true(真)和false (假)。使用true作为条件时,表示条件永远成立,循环体内的命令序列将无限执行下去,除非强制终止脚本(或通过exit语句退出脚本);反之,若使用false作为条件.则循环体将不会被执行。这两个特殊条件也可以用在if语句的条件测试中。

2、while语句应用示例

(1)批量添加规律编号的用户

        在一些技术培训和学习领域.出于实验或测试的目的.需要批量添加用户账号,这些用户的名称中包含固定的前缀字串,并按照数字顺序依次进行编号,账号的数量往往也是固定的,例如,若要添加20个用户,名称依次为stu1、 stu2、…、stu20,可以参考以下操作。

[root@lucky u3]# vim uaddwhile.sh
#!/bin/bash
prefix="stu"
i=1
while [ $i -le 20 ]
douseradd ${prefix}$iecho "123456" | passwd --stdin ${prefix}$i &> /dev/nulllet i++
done[root@lucky u3]# chmod +x uaddwhile.sh 
[root@lucky u3]# ./uaddwhile.sh 
[root@lucky u3]# grep "stu" /etc/passwd | tail -5
stu16:x:1017:1017::/home/stu16:/bin/bash
stu17:x:1018:1018::/home/stu17:/bin/bash
stu18:x:1019:1019::/home/stu18:/bin/bash
stu19:x:1020:1020::/home/stu19:/bin/bash
stu20:x:1021:1021::/home/stu20:/bin/bash

        若要删除uaddwhile , sh 脚本所添加的用户,只需参考上述脚本代码.将while循环体中添加用户的命令序列改为删除用户的操作即可。

三、实验案例——Shell脚本

        实验描述

        编写一个名为getarp.sh 的小脚本,记录局域网中各主机的MAC地址。

                保存到/etc/ether文件中,若此文件已存在,应先转移进行备份。

                每行一条记录,第1列为IP地址.第⒉列为对应的MAC地址。
        编写一个名为scanhost.sh的扫描脚本,检查有哪些主机开启了匿名FTP服务,扫描对象为/etc/ether 文件中的所有IP地址,扫描的端口为21。

[root@lucky u3]# vim getarp.sh
#!/bin/bash
#定义网段地址、MAC列表文件
nadd="192.168.223."
file="/etc/ethers"
#发送ARP请求,并记录反馈结果
#备份原有文件 
[ -f $file ] && /bin/cp -f $file $file.old
#定义起始扫描地址
hadd=1 
while [ $hadd -lt 128 ]
doarping -I ens33 -c 2 ${nadd}${hadd} &> /dev/nullif [ $? -eq 0 ] ; thenarp -n | grep ${nadd}${hadd} | awk '{prink $1 $3}' >>$filefi let hadd++
done
[root@lucky u3]# vim scanhost.sh
#!/bin/bash
target=$(awk '{print $1}' /etc/ethers)
echo "以下主机已开放匿名服务:"
for IP in $targetdowget ftp://$IP/ &> /dev/nullif [ $? -eq 0 ] ; thenecho $IP
#删除测试产生的临时文件rm -rf index.htmlfi
done

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

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

相关文章

第七部分 二元关系

目录 主要内容 例1 笛卡儿积的性质 例2 注意&#xff1a;对于整除x整除y则&#xff0c;y/x为整数 例如 例3 关系的基本运算 例4 R{<1,2>,<1,3>,<2,4>,<4,3>} 例5 例6 关系运算的性质 例7 设A {a,b,c,d}, R {,,,},d>,c>,a>,b> 等价关系的…

UE和Android互相调用

ue和android互调 这两种方式都是在UE打包的Android工程之上进行的。 一、首先是UE打包Android&#xff0c;勾选下面这项 如果有多个场景需要添加场景 工程文件在这个路径下 然后可以通过Android Studio打开&#xff0c;选择gradle打开 先运行一下&#xff0c;看看是否可以发布…

第八部分 函数

定义 8.1 设 F 为二元关系 , 若 ∀ x ∈ dom F 都存在唯一的 y ∈ ran F 使 xFy 成立 , 则称 F 为 函数 对于函数 F , 如果有 xFy , 则记作 y F ( x ), 并称 y 为 F 在 x 的 值 . 例 F 1 {< x 1 , y 1 >,< x 2 , y 2 >,< x 3 , y 2 >…

Python实验:关灯游戏

文章目录 前言一、设计表二、关键代码三、运行结果小地图&#xff0c;容易难度&#xff1a;中地图&#xff0c;中等难度&#xff1a;大地图&#xff0c;困难难度&#xff1a; 四、完整代码链接总结 前言 这是一个Python实验作业&#xff0c;内容如下&#xff1a; 题目要求&am…

多维时序 | MATLAB实CNN-BiGRU-Mutilhead-Attention卷积网络结合双向门控循环单元网络融合多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现CNN-BiGRU-Mutilhead-Attention卷积网络结合双向门控循环单元网络融合多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现CNN-BiGRU-Mutilhead-Attention卷积网络结合双向门控循环单元网络融合多头注意力机制多变量时间序列预测预测效果基本介…

NUAA-云计算-考试

19级期末 问题 答案: md格式 自己想办法看 # 随堂测验#### 一、请简述GFS 的系统架构和特点。**1. 系统架构**- GFS将整个系统节点分为三类角色&#xff1a;- Client&#xff08;客户端&#xff09;&#xff1a;Client是GFS提供给应用程序的访问接口&#xff0c;以库文件的…

SpringBoot2.x+mybatis plus3.x集成Activit7版本

文/朱季谦 在Activiti6版本当中&#xff0c;若要集成到Springboot里&#xff0c;需要写一些额外的配置类&#xff0c;我曾经在Activiti工作流框架学习笔记&#xff08;二&#xff09;之springboot2.0整合工作流Activiti6.0一文当中总结过相关配置过程&#xff0c;感兴趣的同学…

ssh工具 向指定的ssh服务器配置公钥

此文分享一个python脚本,用于向指定的ssh服务器配置公钥,以达到免密登录ssh服务器的目的。 效果演示 🔥完整演示效果 👇第一步,显然,我们需要选择功能 👇第二步,确认 or 选择ssh服务器 👇第三步,输入ssh登录密码,以完成公钥配置 👇验证,我们通过ssh登录…

AI时代下,如何看待“算法利维坦”?程序员客栈程序员客栈​

ChatGPT的浪潮从2022年袭来后&#xff0c;至今热度不减&#xff0c;呈现出蓬勃发展的趋势。AI家居、医疗、教育、金融、公益、农业、艺术......AI真的已经走进了生活的方方面面&#xff0c;我们仿佛已经进入了AI时代&#xff0c;势不可挡。人工智能水平如此之高&#xff0c;不禁…

学习在UE中通过Omniverse实现对USD文件的Live-Sync(实时同步编辑)

目标 前一篇 学习了Omniverse的一些基础概念。本篇在了解这些概念的基础上&#xff0c;我想体验下Omniverse的一些具体的能力&#xff0c;特别是 Live-Sync (实时同步) 相关的能力。 本篇实践了使用Omniverse的力量在UE中建立USD文件的 Live-Sync 编辑。由于相关的知识我是从…

AI进化太快了!Stability AI开源视频生成大模型Stable Video Diffusion

对于 Stable Diffusion&#xff0c;想必读者朋友们对此都不陌生。 自 Stability AI 公司发布 SD&#xff08;全称&#xff1a;Stable Diffusion) 以来&#xff0c;受到了很多人的喜爱。 SDXL 效果 随后技术升级&#xff0c;又发布了 SDXL&#xff0c;名字很有喜感&#xff0c…

青岛农业大学 百度网盘,青岛农业大学参考书目

大家好&#xff0c;本文将围绕青岛农业大学c语言程序设计展开说明&#xff0c;javase青岛农业大学教材答案是一个很多人都想弄明白的事情&#xff0c;想搞清楚青岛农业大学 百度网盘需要先了解以下几个事情。 文章目录 前言一、需要安装什么软件&#xff1f;二、代码准备 1.fid…