您的位置:首页 > 理论基础 > 计算机网络

linux ping多个地址并将网络结果记录出.

2015-01-15 22:06 197 查看
如有一文件ip.txt,其内容为:

10.0.16.1

10.0.16.2

……

10.0.16.x

编写ping_test.sh,内容如下:

#!/bin/sh
for ip in `cat ip.txt`
do
ping -c 4 $ip >/dev/null && echo "$ip pass" || echo "$ip loss"
done


其中ping4次某一个地址,如果ping通就打印其ip pass,如果没有ping通就打ip loss。(ping命令执行后结果$?,如果执行成功就是0,不成功就是非0)。

但上面有一个问题就是如果ping一个网络地址不可达,就会直接打印出connect: 网络不可达,原因是只把执行结果指向了/dev/null,而没有标准错误输出到/dev/null。

如下:

1> stdout:表示标准输出,默认是1

2> stderr:表示标准错误

& :表示等同于,2>&1,表示标准错误重定向,等同于标准输出

所以将改为以下内容

ping -c 4 $ip >/dev/null 2>&1 && echo "$ip pass" || echo "$ip loss"
当然也可写为(传说效率会低很多)

ping -c 4 $ip >/dev/null 2>/dev/null && echo "$ip pass" || echo "$ip loss"
最后可修改为每次传一个IP文件进行查看,并且检查到不是一个参数时给出提示。

#!/bin/sh
if [ $# -ne 1 ];then
echo "Please enter a paramter!"
else
for ip in `cat $1`
do
ping -c 4 $ip >/dev/null 2>&1 && echo "$ip pass" || echo "$ip loss"
done
fi
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: