shell脚本检查ping包丢失& AIX上的avg延迟

时间:2014-08-11 09:04:01

标签: shell scripting ping

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

用于数据包丢失我创建了行

`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

2 个答案:

答案 0 :(得分:2)

试试这个:

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

如果它看到一行"丢包"在其中,它创建一个包含丢包百分比的字符串x。如果它看到一条带有"往返的行#34;它用往返时间覆盖字符串x。最后,它会打印设置为x的字符串。

根据你的评论...

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

所以,现在"数据包丢失" line还必须包含" 100"在我们拿起它之前。 "往返的第四个领域"使用a[]作为分隔符将行拆分为数组/,然后我们将a[]的第二个元素作为平均值并将其存储在输出字符串x中。

答案 1 :(得分:2)

使用sed:

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