LinuxForum.Fans
Тема

Ping - вывод только мс

Автор: tnega 12 сообщений 4366 просмотров
#346966

Здравствуйте.

Нужна помощь в составлении скрипта.

Есть шлюз с двумя интернет каналами, бывает так, что на одно канале портиться качество (проблемы у вышестоящего провайдера) в итоге пинг возрастает до 150-200 мс.

Хотелось бы дополнить свой уже существующий скрипт переключения маршрутизации при падении одного из каналов.

Пример - пинг какого либо ресурса, если пинг больше 50 мс - переключает на другой канал.
Мне просто нужно чтобы команда пинг выводила только время передачи пакета и всё.

P.S. Пытался искать примеры команд ping grep или wc, но к сожалению ничего не нашел.

#346988
"tnega" написал:
Мне просто нужно чтобы команда пинг выводила только время передачи пакета и всё.

Например:

text
# ping ya.ru -c1 | grep 'time=' | awk '{print $8}'
#347041
zenon написал:
[quote="tnega"]Мне просто нужно чтобы команда пинг выводила только время передачи пакета и всё.

Например:

text
# ping ya.ru -c1 | grep 'time=' | awk '{print $8}'

[/quote]

большое спасибо. не могли бы Вы немного подправить данную команду? хотелось бы убрать вывод - time= и последние два символа в цифрах, то есть точку и цифру

пример:
у меня выводится так - time=12.5

#347047

Кривовато, если кому важно, исправьте:

text
# ping ya.ru -c1 | grep 'time=' | awk '{print $8}' | cut -c6-12 | sed -e 's/\..*//'

(sed обрезает всё после точки включая точку).

#347057
zenon написал:
Кривовато, если кому важно, исправьте:
text
# ping ya.ru -c1 | grep 'time=' | awk '{print $8}' | cut -c6-12 | sed -e 's/\..*//'

(sed обрезает всё после точки включая точку).

спасибо большое! буду учить sed и cut!

предполагал сделать такой скрипт:

text
PING1=${ping ya.ru -c1 | grep 'time=' | awk '{print $8}' | cut -c6-12 | sed -e 's/\..*//'}
if [ $PING1 -lt 50 ]; then
echo OK
else
echo BAD
fi

но что-то не работает
раньше я таким образом измерял количество записей в АРП таблице этим скриптом:

text
ARP1=$(arp -an | wc -l)
if [ $ARP1 -lt 10 ]; then
echo ARP OK
else
echo BAD
fi

были так же проблемы с одним из интернет каналов, переполнялась АРП таблица. В общем думал, что и в варианте с пингом получится, оказалось что нет :-)

#347060

Ну, во-первых, можно немножко оптимизировать, а во-вторых, у вас фигурные скобки там стоят

text
PING1=$(ping ya.ru -c1|awk '/www/{print $8}'|cut -b6-|sed -e 's/\..*//')
if [ $PING1 -lt 50 ]; then
echo OK
else
echo BAD
fi
#347061
sandaksatru написал:
Ну, во-первых, можно немножко оптимизировать, а во-вторых, у вас фигурные скобки там стоят
text
PING1=$(ping ya.ru -c1|awk '/www/{print $8}'|cut -b6-|sed -e 's/\..*//')
if [ $PING1 -lt 50 ]; then
echo OK
else
echo BAD
fi

Спасибо большое! и прошу прощения у Вас за свою невнимательность! :-)

#347105

Ну нагородили :)

text

ping ya.ru -c1 | grep -Po "(?<=time=)[0-9]+"
#347106
"-=Serj=-" написал:
Ну нагородили

Лёкгих путей не ищем. :_)

#347238
"-=Serj=-" написал:
ping ya.ru -c1 | grep -Po "(?<=time=)[0-9]+"

ещё вариант

text
ping ya.ru -c1 |sed -rn 's/.*time=([0-9]+).*/\1/p'
#347239
"zenon" написал:
Лёкгих путей не ищем

просто вы решаете задачу бессистемно, методом тыка. Вот и получаются такой уродливый быдлокод.

#349627
text
x=`ping -q -c1 ya.ru`; echo "${x#*=}"
Войдите или зарегистрируйтесь, чтобы ответить.