Я пытаюсь выполнить простую проверку целочисленного значения, выводимого из ping. В Linux это работало довольно хорошо, но пинг FreeBSD выводит значение с плавающей запятой с суффиксом знака процента.
LOSS=`/sbin/ping -c 10 -W 1000 -n $IP | grep loss | awk '{print $7}'`
if [ ${LOSS} > ${LIMIT} ]; then
# Do something here
fi
Но поскольку значение $ {LOSS} является строкой, сравнение не выполняется в BSD.
Помогите, пожалуйста?
Вам нужно посмотреть на команду ping BSD. 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.
Надеюсь, поможет!
Вы можете изменить awk
разделить на пробелы и точки, чтобы вытащить целую часть фигуры потерь.
ping -c 10 1.2.3.4 | grep loss | awk '{FS = " |[\.]"} {print $7}'