简单的shell脚本第二版

经过各位老板的指点我修改了部分内容使其更加完善        原文链接  http://www.178linux.com/70381

/bin/bash
declare -i Inet
declare -i Snet
[[ $1 =~ ((2[0-4][0-9]|25[0-5]|1?[0-9]?[0-9])\.){3}(2[0-4][0-9]|25[0-5]|1?[0-9]?[0-9])\/(2[4-9]|3[0-2]) ]]  #正则表达式验证是否为正确格式
if [ $? -ne 0 ] ;then                               #判断格式是否配正确匹配
{
echo ” Usage:$0 172.18.0.0/24-32.”              #如果格式未被正确匹配返回250状态码,并提示使用方法
exit 250
}
fi
Inet=`echo “$1″ | cut -d”.” -f4 | cut -d”/” -f1`   #获取Ip地址位
Iseg=`echo “$1″ | cut -d”/” -f2`                   #获取子网掩码位
Ipv4=`echo “$1″ | cut -d”.” -f1,2,3`               #获取主机位
let Smask=32-$Iseg                                   #计算子网掩码反掩码位数
Sips=$[2**$Smask]                                   #计算出指定网络的IP数
Snet=$[ $Inet + $Sips -1 ]                           #从指定主机数到输出的主机个数
[ $Snet -gt 255 ] && Sips=$[ 256 – $Inet ] && Shosts=255 || Shosts=$[ $Inet + $Sips -1 ]
echo “反向子网掩码位为:$Smask”                     #输出反掩码位数
echo “要查找的地址数为:$Sips”                       #输出主机个数
echo “子网掩码的位数为:$Iseg”                       #输出子网掩码
echo “Ipv4的首个地址为:${Ipv4}.$Inet” #输出网络地址位
echo “查看的网段地址为:${Ipv4}.${Inet}-${Ipv4}.${Shosts}” #输出匹配的网络位
if [ $Snet -gt 255 ] ;then                           #当地址数溢出时的补救措施    
{
Snet=255                                        #主机数强制为255个
}
fi
for i in `seq $Inet $Snet`;                         #for循环从指定主机开始到指定网段结束的IP个数
do

ping -c1 -W1 $Ipv4.$i >/dev/null 2>&1  && echo -e  “\033[32m$Ipv4.$i is \tup \033[0m” || echo -e  “$Ipv4.$i is\033[31m \tdown \033[0m”
read  -dq -s -t 1 wode && exit                        #read接受到用户输入的q后终止循环并退出脚本
#ping 判断主机是在线还是 不在线
done
unset Inet Iseq Ipv4 wjy  Smask Sips Snet  wode         #释放上边使用到的变量


上个版本最大的问题是  只要脚本开始就无法终止脚本  现在按q键可以快退出脚本

正则表达式匹配也不规范  显示的网段和主机个数也有问题

这个脚本适合用子网掩码进行划分过的网络  可以指定任意网段的以子网掩码进行划分的主机


原创文章,作者:wode,如若转载,请注明出处:http://www.178linux.com/71409

(0)
wodewode
上一篇 2017-03-19
下一篇 2017-03-20

相关推荐

  • mount中-o的选项利用

        Mount下—-o 选项的各项用处  mount-o 选项 sync,async 同步模式,异步模式(defaults)         此选项的默认模式为异步模式。在同步模式下,内存的任何修改都会实时的同步到硬盘当中,这种模式的…

    2017-08-19
  • 第七周-磁盘管理、RAID及Shell脚本练习

    一、创建一个10G分区,并格式为ext4文件系统; (1)、 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2)、挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@N1 ~]# mkfs.ext4 -b 2048 -m 2 -L MYDATA /…

    Linux干货 2017-08-13
  • Linux文本三剑客之grep

    一、定义:                 GREP  :Global search REgular expression and Print out the line的缩写。是一种强大的文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;并把匹配的行打印出…

    Linux干货 2016-04-05
  • 第十二周作业

    1、 请描述一次完整的http请求处理过程;  HTTP:超文本传输协议 完整的http请求过程 1)、建立TCP/IP连接:经过3次握手,建立连接或拒绝。 2)、浏览器向服务器发送HTTP请求。 3)、浏览器发送请求头信息。 4)、服务器应答:服务器接受请求后,会回送应答。 5)、服务器发送应答头信息。 6)、服务器向浏览器发送数据。 7)、服务…

    2017-05-17
  • 马哥教育网络班21期+第4周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 # cp -a /etc/skel /home/tuser1 # chmod -R g-rwx,o-rwx /home/tuser1/ 2、编辑…

    Linux干货 2016-07-16
  • bash脚本初探

                              (注)$@和$*的区别,以及$0..$n [root@ _6_ ~]# cat weizhi.sh  #!/bin/bash e…

    Linux干货 2016-08-15