0

我有一个方便的花花公子 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
4

2 回答 2

1

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

awk -v host=$myHost '/packet loss/ && $7!="0%" {print host, $7}'
于 2012-08-24T21:27:11.037 回答
0

如果您只想检查每个主机是否还活着的主机列表,那么我建议ping为此目的完全放弃使用并使用fping,这常规脚本更好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%'
于 2012-08-25T20:17:04.450 回答