温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

shell脚本ping -w用法

发布时间:2020-07-21 22:04:29 来源:网络 阅读:7362 作者:290480358 栏目:开发技术

今天写了一个循环ping的脚本用来扫描网段中一些不通的ip地址,代码如下:

#!/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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI