简单的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 21:07
下一篇 2017-03-20 14:41

相关推荐

  • linux基本命令的使用

      1>    查看当前终端名:tty 或who am i       查看当前所有登录的终端信息:who       查看当前所有登录的终端的详细信息 w 2> 编辑器    …

    2017-07-15
  • 第四周作业

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

    Linux干货 2016-12-27
  • N22-第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。     首先用who命令查看所有已登录用户信息,然后用cut命令取出用户名,再用sort -u对用户名排序并删除重复的用户名      2、取出最后登录到当前系统的用户的相关信息。  &n…

    Linux干货 2016-09-05
  • 装饰器

    装饰器(Decorator) 装饰器推导过程 需求 一个加法函数,想增强它的功能,能够输出被调用过以及调用的参数信息 def add(x,y): return x + y 增加信息输出功能 def add(x,y): print(‘call {},{}+{}’.format(add.__name__, x, y)) return x + y 不足:打印语句的…

    2017-10-23
  • iptables的一个小文档

    iptables:    iptables五表五链        felter表            INPUT   …

    Linux干货 2017-04-30
  • MySQL Replication (MySQL的主从复制)

    MySQL Replication(MySQL的主从复制) 主从数据库的工作模型: 工作要点:1、主服务器要开启二进制日志 2、从服务器要有一个用户账户,这个账户要有权限到主服务器上请求二进制事件,请求完后保存到本地。 3、从服务器上要有一个线程,从中继日志中不断的读事件,在本地replay。 Master/Slave    &…

    Linux干货 2016-11-21