Использование ping
Только один раз
Прежде всего, вам не нужно выполнять ping
дважды.Существует несколько способов извлечения статуса выхода и максимального времени за один раз.Вот альтернативная версия вашего скрипта:
#!/bin/bash
count="$1"
target="$2"
testname="$3"
if time=$(set -o pipefail;
ping -c "$count" "$target" 2>&- | awk -F/ 'END {print $6}')
then
result=Success
else
result=Failure
fi
echo "$testname,$result,$time"
или вы можете заменить часть if ... fi
на
output="$(ping -c "$count" "$target" 2>&-)"
[ $? = 0 ] && result=Success || result=Failure
time="$(awk -F/ 'END {print $6}' <<< "$output")"
Оба эти скрипта эквивалентны вашему скрипту и не печатаютвремя в случае сбоя ping
.
Измерение времени в случае сбоя
Чтобы »получить длительность« , сначала нужно указать, что »Длительность« равна.
Если вы хотите, чтобы время выхода из ping
заняло достаточно времени, используйте команду time
или измерьте время самостоятельно с помощью двух вызовов date
или с помощью$EPOCHESECONDS
in bash
≥ 5.0.Однако это значение не имеет смысла, и я не понимаю, почему вы хотите его напечатать.
Если вы говорите о тайм-ауте (не в случае google1.com), вы также можете указать тайм-аутсебя и используйте это значение.