Назад | Перейти на главную страницу

Как я могу получить целочисленный вывод при пинге BSD?

Я пытаюсь выполнить простую проверку целочисленного значения, выводимого из 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}'