我正在尝试对 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命令中需要修改哪些参数。
希望能帮助到你!