如何使用 OS X 的终端 ping 一个 IP,并使用延迟作为循环的停止条件?

如何使用 OS X 的终端 ping 一个 IP,并使用延迟作为循环的停止条件?

我想做的是在延迟高于特定值时 ping 一个 IP。我认为下面这个示例会有所帮助:

假设该"ping *IP here*"命令得到以下结果:

PING *IP here* (*IP here*): 56 data bytes
64 bytes from *IP here*: icmp_seq=0 ttl=53 time=127.238 ms
64 bytes from *IP here*: icmp_seq=1 ttl=53 time=312.762 ms
64 bytes from *IP here*: icmp_seq=2 ttl=53 time=251.475 ms
64 bytes from *IP here*: icmp_seq=3 ttl=53 time=21.174 ms
64 bytes from *IP here*: icmp_seq=4 ttl=53 time=27.953 ms

我希望有一种方法可以让 ping 在延迟低于给定值后停止。假设为 100,那么在上面的例子中,它会在第 4 个结果后停止。

答案1

该脚本似乎有效:

#!/bin/sh

HOST="verizon.net"
MIN_TIME=80

LOOP="TRUE"    
while [ $LOOP = "TRUE" ]
do
  latency=`ping -c 1 $HOST | head -2 | tail -1 | sed -e 's/.*time=\(.*\) ms/\1/' | sed -e 's/\..*//'`
  echo "Latency: $latency"
  if [ $latency -lt $MIN_TIME ]
  then
    echo "Target latency ($MIN_TIME) achieved!"
    LOOP="FALSE"    
  fi
done

输出如下所示,当低于我的阈值(80 毫秒)时停止:

Latency: 83
Latency: 88
Latency: 119
Latency: 77
Target latency (80) achieved!

调整脚本中的变量以供您使用。您可能需要调整 head/tail/sed 部分以适应您的ping输出。这是使用 Mac OS X 10.9 编写的ping

相关内容