我想做的是在延迟高于特定值时 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
。