shell脚本应用(三)

防伪码:长风破浪会有时,直挂云帆济沧海

                shell脚本应用(三)

前言:当面对各种列表重复任务时,使用if语句已经难以满足要求,而顺序编写全部代码更是显得异常繁琐,困难重重。使用循环、分支等其他程序控制结构,从而能够轻松完成更加复杂、强大的功能。

1、 使用for循环语句(读取不同的变量值,用来逐个执行同一组命令)

wKioL1fiVKOTFYHJAABJqDBjA2w042.png-wh_50

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

准备员工列表文件users.txt,然后编写一个名为uaddfor.sh的脚本,从users.txt文件中读取各用户名称,重复执行添加用户,设置初始密码的相关操作。

Vi  /root/users.txt

wKioL1fiQY3Bum5xAAACdwPsNy4550.png-wh_50

Vi  uaddfor.sh

wKiom1fiQaDhp9DwAAAGciR1Gbo665.png-wh_50

执行脚本:./uaddfor.sh之后查看用户文件cat  /etc/passwd

 

wKiom1fiQbKjkjzuAAAFM_u5cgQ903.png-wh_50

2)若要删除uaddfor.sh脚本添加的用户,只需要将上面脚本中添加用户的命令改为删除的即可。

Vi  udelfor.sh

wKioL1fiQd6ixxwmAAAFHIS1trA940.png-wh_50

执行脚本之后发现用户已经删除

 

3)根据ip地址列表查看主机状态

首先建立ip地址列表文件ipadds.txt,然后编写一个名为chkhosts.sh的shell脚本,从ipadds.txt文件中读取各服务器的ip地址,

重复执行ping连通性测试,并根据测试结果输出相应的提示信息。

Vi  /root/ipadds.txt

wKioL1fiQfehJVRLAAACR57_GH8653.png-wh_50

编写脚本vi chkhosts.sh

wKiom1fiQg6DiZnpAAAH75tP5TQ022.png-wh_50

执行脚本

wKioL1fiQh6Ct2JQAAADNI2fyuI467.png-wh_50

2、 使用while循环语句(重复测试某个条件,只要条件成立则反复执行。For循环适合无规律,列表已固定,while循环适合要求循环次数,操作对象按数字顺序编号,按特定条件执行重复操作的情况。

wKioL1fiVd-Q4NChAABNeCGw5iY186.png-wh_50


1) 批量添加规律编号的用户,添加20个用户,名称依次为stu1,stu2,... Stu20

Vi  uaddwhile.sh

wKioL1fiQkLxdQhiAAAGxUQbTdw798.png-wh_50

循环条件:序号<=20

let ++:序号递增,避免死循环

执行脚本之后查看用户:cat /etc/passwd

wKiom1fiQliR7ZfcAAAFtJB_cXI360.png-wh_50

2)删除所添加的用户,只需将上述代码修改即可

Vi  udelwhile.sh

wKioL1fiQoShQA0KAAAE9qj81jQ526.png-wh_50

执行脚本之后查看用户是否被删除

3) 猜价格游戏

思路:通过环境变量RANDOM可获得一个小于2的16次方的随机整数,计算其与1000的余数即可获得0-999的随机价格,反复猜测操作可以通过以true作为测试条件的while循环实现,当用户猜中实际价格时终止循环,判断猜测价格与实际价格的过程采用if语句实现,嵌套在while循环体内,使用变量来记录猜测次数。

Vi  pricegame.sh

wKiom1fiQpnTpw5HAAAMd6HhtEw508.png-wh_50

 Chmod  +x  pricegame.sh

./pricegame.sh执行脚本

wKiom1fiQq_CrWFcAAAK9nFCj9k959.png-wh_50

3、 使用case分支语句(针对变量的不同取值,分别执行不同的命令序列 

Case语句可以使用脚本程序的结构更加清晰。

wKiom1fiVVLw3OnZAACB_RPDBiQ768.png-wh_50

1) 检查用户输入一个字符,通过case语句判断该字符是否为字母,数组或其他控制字符,并给出相应的提示信息。

Vi  hitkey.sh

wKiom1fiRqDgULDJAAAHJyAyHEs363.png-wh_50

执行脚本的效果:

wKioL1fiRtKBNl0PAAAGdySr-6Y235.png-wh_50

1) 编写系统服务脚本

通过位置变量$1指定的start,stop,restart,status控制参数,分别用来启动、停止、重启sleep进程,以及查看sleep进程的状态。

Vi  myprog

wKioL1fiRu_y8vxbAAALL5T48Tg572.png-wh_50

测试并确认myprog脚本的执行结果如下:

wKioL1fiRzOAc4WhAABod-8HTX0869.jpg-wh_50

然后执行下面的命令添加myprog为系统服务

wKioL1fiR0PgX5qNAAAFWIpB9qU505.png-wh_50

上机实验部分:

实验案例:shell脚本应用实战

1、编写getarp.sh脚本文件

(1)通过arping命令发送ARP请求,根据反馈结果记录MAC地址。

(2)将网段地址(如192.168.4.)赋值给变量NADD,作为检测地址的前缀。

(3)使用while循环语句,重复检测目标并记录MAC地址,主机地址从1-254。

我们使用桥接网络获取到0.102和0.103地址,并做测试

wKiom1fiV2yC9D7IAAAkE6CigMk858.png-wh_50


1、定义网段地址、MAC列表文件、发送ARP请求,并记录反馈结果(如果网段发生变化,只需修改MADD=“192.168.x.”)

wKioL1fiURyhwsXdAAALu5_c_Dc838.png-wh_50

wKioL1fiUTKwIFiOAAAC2A2IMdw068.png-wh_50

执行脚本之后查看/etc/ethers文件

chmod +x getarp

./getarp

Cat  /etc/ethers

wKioL1fiUUCRUyJ0AAAHwT8WPLc167.png-wh_50

 2、编写scanhost.sh脚本

(1)有很多方法可以检测一个主机是否开启匿名FTP服务,这里采取以wget下载工具访问FTP根目录的方式,若能够成功列表,则视为匿名FTP已开启,否则视为关闭。

(2)通过awk命令过滤出/etc/ethers文件中的所有IP地址,赋值给变量TARGET。

(3)使用for循环语句,读取TARGET变量中的IP地址,重复探测FTP开启情况。

wKiom1fiUfzAuLpxAAAJ4TyEmwg015.png-wh_50

执行脚本之前在另一台linux服务器B192.168.1.2上搭建ftp服务(使用vsftpd软件),然后在linuxA上执行脚本

在B上安装vsftpd,如下图所示:

wKioL1fiUjGxf5VkAAAKVne36EQ685.png-wh_50

Vim /etc/vsftpd/vsftpd.conf启用匿名,默认就启用了,我们查看一下:

wKiom1fiUkyyDmZlAABYApQXuhQ505.jpg-wh_50

开启ftp服务

Service  vsftpd  start

wKiom1fiUpizMB3WAAAEh8qIEAc716.png-wh_50

在A上登录ftp 192.168.1.2测试,如果不能使用ftp命令,则需要安装ftp-0.17......

wKioL1fiUrHgCHFRAAAIRd9v0d8089.png-wh_50

wKioL1fiUtPjjsSUAAAqFtAaq_s240.jpg-wh_50

最后在A上执行脚本./scanhost.sh

wKioL1fiUxaA7MkCAAAbXOt5BEs082.jpg-wh_50

执行脚本之后发现192.168.1.2开启了ftp匿名登录。

谢谢观看,希望能真心的帮到您!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值