防伪码:长风破浪会有时,直挂云帆济沧海
shell脚本应用(三)
前言:当面对各种列表重复任务时,使用if语句已经难以满足要求,而顺序编写全部代码更是显得异常繁琐,困难重重。使用循环、分支等其他程序控制结构,从而能够轻松完成更加复杂、强大的功能。
1、 使用for循环语句(读取不同的变量值,用来逐个执行同一组命令)
1) 根据姓名列表批量添加用户
准备员工列表文件users.txt,然后编写一个名为uaddfor.sh的脚本,从users.txt文件中读取各用户名称,重复执行添加用户,设置初始密码的相关操作。
Vi /root/users.txt
Vi uaddfor.sh
执行脚本:./uaddfor.sh之后查看用户文件cat /etc/passwd
2)若要删除uaddfor.sh脚本添加的用户,只需要将上面脚本中添加用户的命令改为删除的即可。
Vi udelfor.sh
执行脚本之后发现用户已经删除
3)根据ip地址列表查看主机状态
首先建立ip地址列表文件ipadds.txt,然后编写一个名为chkhosts.sh的shell脚本,从ipadds.txt文件中读取各服务器的ip地址,
重复执行ping连通性测试,并根据测试结果输出相应的提示信息。
Vi /root/ipadds.txt
编写脚本vi chkhosts.sh
执行脚本
2、 使用while循环语句(重复测试某个条件,只要条件成立则反复执行。For循环适合无规律,列表已固定,while循环适合要求循环次数,操作对象按数字顺序编号,按特定条件执行重复操作的情况。)
1) 批量添加规律编号的用户,添加20个用户,名称依次为stu1,stu2,... Stu20
Vi uaddwhile.sh
循环条件:序号<=20
let ++:序号递增,避免死循环
执行脚本之后查看用户:cat /etc/passwd
2)删除所添加的用户,只需将上述代码修改即可
Vi udelwhile.sh
执行脚本之后查看用户是否被删除
3) 猜价格游戏
思路:通过环境变量RANDOM可获得一个小于2的16次方的随机整数,计算其与1000的余数即可获得0-999的随机价格,反复猜测操作可以通过以true作为测试条件的while循环实现,当用户猜中实际价格时终止循环,判断猜测价格与实际价格的过程采用if语句实现,嵌套在while循环体内,使用变量来记录猜测次数。
Vi pricegame.sh
Chmod +x pricegame.sh
./pricegame.sh执行脚本
3、 使用case分支语句(针对变量的不同取值,分别执行不同的命令序列
Case语句可以使用脚本程序的结构更加清晰。)
1) 检查用户输入一个字符,通过case语句判断该字符是否为字母,数组或其他控制字符,并给出相应的提示信息。
Vi hitkey.sh
执行脚本的效果:
1) 编写系统服务脚本
通过位置变量$1指定的start,stop,restart,status控制参数,分别用来启动、停止、重启sleep进程,以及查看sleep进程的状态。
Vi myprog
测试并确认myprog脚本的执行结果如下:
然后执行下面的命令添加myprog为系统服务
上机实验部分:
实验案例:shell脚本应用实战
1、编写getarp.sh脚本文件
(1)通过arping命令发送ARP请求,根据反馈结果记录MAC地址。
(2)将网段地址(如192.168.4.)赋值给变量NADD,作为检测地址的前缀。
(3)使用while循环语句,重复检测目标并记录MAC地址,主机地址从1-254。
我们使用桥接网络获取到0.102和0.103地址,并做测试
1、定义网段地址、MAC列表文件、发送ARP请求,并记录反馈结果(如果网段发生变化,只需修改MADD=“192.168.x.”)
执行脚本之后查看/etc/ethers文件
chmod +x getarp
./getarp
Cat /etc/ethers
2、编写scanhost.sh脚本
(1)有很多方法可以检测一个主机是否开启匿名FTP服务,这里采取以wget下载工具访问FTP根目录的方式,若能够成功列表,则视为匿名FTP已开启,否则视为关闭。
(2)通过awk命令过滤出/etc/ethers文件中的所有IP地址,赋值给变量TARGET。
(3)使用for循环语句,读取TARGET变量中的IP地址,重复探测FTP开启情况。
执行脚本之前在另一台linux服务器B192.168.1.2上搭建ftp服务(使用vsftpd软件),然后在linuxA上执行脚本
在B上安装vsftpd,如下图所示:
Vim /etc/vsftpd/vsftpd.conf启用匿名,默认就启用了,我们查看一下:
开启ftp服务
Service vsftpd start
在A上登录ftp 192.168.1.2测试,如果不能使用ftp命令,则需要安装ftp-0.17......
最后在A上执行脚本./scanhost.sh
执行脚本之后发现192.168.1.2开启了ftp匿名登录。
谢谢观看,希望能真心的帮到您!
本文出自 “一盏烛光” 博客,谢绝转载!