简单的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

相关推荐

  • N25期–第十七周作业

    1、  结合图形描述LVS的工作原理; 针对高可伸缩、高可用网络服务的需求,给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器。 虚拟服务器的体系结构如图所示,一组服务器通过高速的局域网或者地理分布的广域网相互连接,在它们的前端有一个负载调度器(…

    2017-05-08
  • Linux boot分区意外格式化或清除之后…

    boot分区在没有备份的情况下意外被清空,包括启动引导信息也没了。这时若Linux还在运行,那你是幸运的, 修复的方法: 1. cat  /etc/*release      #赶快先确定当前系统的具体版本。有ISO镜像赶快挂载上来.   &nbsp…

    Linux干货 2016-03-22
  • Mariadb基于ssl的主从复制

    Mariadb基于ssl的主从复制 一、前言 备份数据库是生产环境中的首要任务,重中之重。一般配置中mariadb的主从传输是明文传输,但是有时候对一些特殊业务来说是不允许的,为了保证数据在传输过程中的安全性,因此使用基于SSL的复制会大大加强数据的安全性。 二、准备工作 1、实验系统环境: CentOS7.2,SELinux关闭,iptables关闭,安装…

    Linux干货 2017-02-24
  • Linux基础命令 2017-07-12日课

    bc, lscpu, free, dd, rpm, lsblk, ldd, file, hexdump, uname, sha1sum, sha256sum, md5sum bc an arbitrary precision language scale=NUM ; precision quit lscpu display information about…

    Linux干货 2017-07-12
  • BIND在生产环境中的创建

    一、实验:BIND二级域的搭建(均以yum安装bind),从实验图中可以看出需要五台虚拟机进行测试 一、准备五台虚拟机 二、配置root服务器 1、YUM安装bind的程序 2、配置bind的主配置文件 3、配置区域文件 4、为了实验的方便进行,把防火墙和SElinux关闭,并留意区域文件的属主属组 5、检查named的主配置文件和区域文件是否语法错误,并启…

    Linux干货 2016-10-05
  • 永远不要让自己停下

    曾几何时,我还是刚出象牙塔的小男孩。想想现在,经过4年的洗礼,我不再是小男孩了。可是,我却发现自己变得越来越懒,守着那丁点的知识。 我早已坐吃山空而不自知,早已落后于时代的趋势而不自知。时代需要一个勤奋而专注的我,需要一个不懈怠的我。 如果,我不继续前进,等待我的只有堕落。逆水行舟不进则退,不逼自己一把,永远不知道自己的潜力有多大。 我希望说,再见,懈怠而懒…

    Linux干货 2016-10-07