用于检查 AIX 上的 ping 数据包丢失和平均延迟的 shell 脚本



我正在尝试创建将ping到远程服务器并仅显示的脚本1) %丢包量2)平均往返延迟(ms

)

为丢包创建了line

`ping -c 3 -s 14 x.x.x.x|grep packet|awk '{print $7}'|cut -d'%' -f1`

只给出丢包,

我的问题开始时,IP是不可达的输出线路变化因此我不能同时捕获

作为参考,我显示了两个场景的输出

   `/pefmephbir >ping -c 3 -s 14 10.9.50.225`
  PING 10.9.50.225 (10.9.50.225): 14 data bytes
  --- 10.9.50.225 ping statistics ---
  **3 packets transmitted, 0 packets received, 100% packet loss**

  `/pefmephbir >ping -c 3 -s 14 10.9.50.220`
  PING 10.9.50.220 (10.9.50.220): 14 data bytes
  22 bytes from 10.9.50.220: icmp_seq=0 ttl=63 time=0 ms
  22 bytes from 10.9.50.220: icmp_seq=1 ttl=63 time=0 ms
  22 bytes from 10.9.50.220: icmp_seq=2 ttl=63 time=0 ms
  --- 10.9.50.220 ping statistics ---
  **3 packets transmitted, 3 packets received, 0% packet loss
  round-trip min/avg/max = 0/0/0 ms**

希望有专门编写脚本的人可以帮助我

TIA

试试这个:

ping ... | awk '/packet loss/{x="Loss:" $7} /round-trip/{x="Trip:" $4} END{print x}'

如果它看到一行"packet loss",它创建一个字符串x,其中包含丢包百分比。如果它看到带有"round-trip"的行,它将用往返时间覆盖字符串x。最后,它输出x所设置的字符串。

考虑到你的意见……

awk '/packet loss/ && /100/{x="Loss: " $7} /round-trip/{split($4,a,///);x="Ave: " a[2]} END{print x}'

所以,现在"packet loss"行在我们拾取它之前必须包含"100"。"往返"行的第4个字段以/作为分隔符分割成一个数组a[],然后我们将a[]的第二个元素作为平均值并存储在我们的输出字符串x中。

使用sed:

ping ... | sed -n -e 's/.*(100% packet loss).*/1/p' 
                  -e 's_.*min/avg/max = [0-9]*/([0-9]*)/[0-9]*.*_1_p'

最新更新