将条件子句添加到简单的ping脚本

时间:2012-08-24 21:19:43

标签: shell

我有一个方便的花花公子shell脚本,它遍历一个IP地址列表,并回显丢包的百分比(下图)。

如果百分比不等于0.0%,我喜欢编织if / then语句以仅回显结果。

您的建议最受赞赏!

#!/bin/bash
HOSTS="192.168.99.24 192.168.99.23"
COUNT=10
SIZE=1400
for myHost in $HOSTS
do

   ping -q -n -s $SIZE -c $COUNT $myHost | awk -v host=$myHost '/packet loss/ {print host, $7}'

done

2 个答案:

答案 0 :(得分:1)

我假设$7是百分比(对我来说是$6)。只需在awk脚本中添加一个额外条件。

awk -v host=$myHost '/packet loss/ && $7!="0%" {print host, $7}'

答案 1 :(得分:0)

如果您只是想检查一个主机列表,如果每个主机都处于活动状态,那么为了这个目的,我建议完全放弃使用ping并使用fping,这是< em>很多比普通ping更好的脚本,并且可以解决这个问题:

$ fping -q -c $COUNT -b $SIZE $HOSTS | grep ': xmt' | grep -v '%loss = .*/0%'
192.168.1.2 : xmt/rcv/%loss = 12/0/100%
192.168.1.3 : xmt/rcv/%loss = 12/0/100%
192.168.1.4 : xmt/rcv/%loss = 12/0/100%

此处grep的调用仅用于(1)grep仅用于生成的行,(2)删除0%丢失的不需要的行,如下所示:

192.168.1.1 : xmt/rcv/%loss = 12/12/0%, min/avg/max = 1.08/1.11/1.19

fping可以很好地扩展到数百万台主机,并可用于ping文件中的主机列表:

fping -q -c $COUNT -b $SIZE -f <host-list.txt | grep ': xmt' | grep -v '%loss = .*/0%'