码迷,mamicode.com
首页 > 系统相关 > 详细

shell脚本应用(三)

时间:2016-09-21 23:31:09      阅读:408      评论:0      收藏:0      [点我收藏+]

标签:杨文   for、while循环   case分支   mac   

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

                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匿名登录。

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


本文出自 “一盏烛光” 博客,谢绝转载!

shell脚本应用(三)

标签:杨文   for、while循环   case分支   mac   

原文地址:http://yw666.blog.51cto.com/11977292/1855118

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!