如何在 BSD ping 上获取整数输出?

如何在 BSD ping 上获取整数输出?

我正在尝试对 ping 输出的整数值进行简单检查。在 Linux 中,这工作得很好,但 FreeBSD ping 输出的是带有百分号后缀的浮点值。

LOSS=`/sbin/ping -c 10 -W 1000 -n $IP | grep loss | awk '{print $7}'`

if [ ${LOSS} > ${LIMIT} ]; then
    # Do something here
fi

但由于 ${LOSS} 的值是一个字符串,因此在 BSD 下比较失败。

请帮助?

答案1

您可以改变awk空格和点上的分割,以便提取损失数字的整数部分。

ping -c 10 1.2.3.4 | grep loss | awk '{FS = " |[\.]"} {print $7}'

答案2

您需要查看 BSD 的 ping 命令。man ping 我假设您想要以下内容:

#!/bin/sh

count1=0
count2=0

Ping=$(ping -s 64 10.10.24.6 -c 10 | grep packet | awk '{print $(NF-2)}') # BSD
#Ping=$(ping -s 64 10.10.24.6 -c 10 | grep packet | awk '{print $(NF-4)}')  # Linux

if [ "$Ping" == "0%" ]; then
count1=$((count1 + 1))
echo IP_addr" "UP" "
else
count2=$((count2 + 1))
echo IP_addr" "DOWN" "
fi

echo $count1 IP addresses UP and $count2 IP addresses DOW

万一你没有得到想要的结果,请弄清楚在ping命令中需要修改哪些参数。

希望能帮助到你!

相关内容