今天写了一个循环ping的脚本用来扫描网段中一些不通的ip地址,代码如下:
创新互联专注于企业网络营销推广、网站重做改版、简阳网站定制设计、自适应品牌网站建设、H5网站设计、商城系统网站开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为简阳等各大城市提供网站开发制作服务。#!/bin/bash
ping_info(){
ping -c 2 -w 1 $1;
if(($?!=0));
then echo $1 >> /tmp/iplist;
fi;
}
for i in `seq 129 254`;do
ip_dx=192.168.1.$i
ip_lt=192.168.2.$i
ip_yd=192.168.3.$i
ping_info $ip_dx
ping_info $ip_lt
ping_info $ip_yd
done
执行之后发现一个问题:无论地址能不能ping通,都写入到了/tmp/iplist中了,与脚本的初衷不符。
后将命令:ping -c 2 -w $1 单独拿出来运行分别用了一个通的ip和不通的ip做测试,发现echo $?的值都为1。
ping -c 2 -w 1 ip: -c 2的意思为ping两个包,-w 1的意思为等待时间为1秒(为了节约执行脚本的时间),问题就出在这个-w 1这里。根据环境的差别,ping的延时不通,ping两个包的时间也不通。我这里用time测试,ping两个包的时间大于1秒。所以如果指定超时时间为1秒的话,第二个包可能没有ping完就被结束了,所以echo $?结果为1。后将超时时间设置为3秒之后,脚本成功运行。
#!/bin/bash
ping_info(){
ping -c 2 -w 3 $1;
if(($?!=0));
then echo $1 >> /tmp/iplist;
fi;
}
for i in `seq 129 254`;do
ip_dx=192.168.1.$i
ip_lt=192.168.2.$i
ip_yd=192.168.3.$i
ping_info $ip_dx
ping_info $ip_lt
ping_info $ip_yd
done
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。