Здравствуйте.
Нужна помощь в составлении скрипта.
Есть шлюз с двумя интернет каналами, бывает так, что на одно канале портиться качество (проблемы у вышестоящего провайдера) в итоге пинг возрастает до 150-200 мс.
Хотелось бы дополнить свой уже существующий скрипт переключения маршрутизации при падении одного из каналов.
Пример - пинг какого либо ресурса, если пинг больше 50 мс - переключает на другой канал.
Мне просто нужно чтобы команда пинг выводила только время передачи пакета и всё.
P.S. Пытался искать примеры команд ping grep или wc, но к сожалению ничего не нашел.
Ping - вывод только мс
Мне просто нужно чтобы команда пинг выводила только время передачи пакета и всё.
Например:
# ping ya.ru -c1 | grep 'time=' | awk '{print $8}'[quote="tnega"]Мне просто нужно чтобы команда пинг выводила только время передачи пакета и всё.
Например:
# ping ya.ru -c1 | grep 'time=' | awk '{print $8}'[/quote]
большое спасибо. не могли бы Вы немного подправить данную команду? хотелось бы убрать вывод - time= и последние два символа в цифрах, то есть точку и цифру
пример:
у меня выводится так - time=12.5
Кривовато, если кому важно, исправьте:
# ping ya.ru -c1 | grep 'time=' | awk '{print $8}' | cut -c6-12 | sed -e 's/\..*//'(sed обрезает всё после точки включая точку).
Кривовато, если кому важно, исправьте: text# ping ya.ru -c1 | grep 'time=' | awk '{print $8}' | cut -c6-12 | sed -e 's/\..*//'(sed обрезает всё после точки включая точку).
спасибо большое! буду учить sed и cut!
предполагал сделать такой скрипт:
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но что-то не работает
раньше я таким образом измерял количество записей в АРП таблице этим скриптом:
ARP1=$(arp -an | wc -l)
if [ $ARP1 -lt 10 ]; then
echo ARP OK
else
echo BAD
fiбыли так же проблемы с одним из интернет каналов, переполнялась АРП таблица. В общем думал, что и в варианте с пингом получится, оказалось что нет :-)
Ну, во-первых, можно немножко оптимизировать, а во-вторых, у вас фигурные скобки там стоят
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Ну, во-первых, можно немножко оптимизировать, а во-вторых, у вас фигурные скобки там стоят textPING1=$(ping ya.ru -c1|awk '/www/{print $8}'|cut -b6-|sed -e 's/\..*//') if [ $PING1 -lt 50 ]; then echo OK else echo BAD fi
Спасибо большое! и прошу прощения у Вас за свою невнимательность! :-)
Ну нагородили :)
ping ya.ru -c1 | grep -Po "(?<=time=)[0-9]+"
Ну нагородили
Лёкгих путей не ищем. :_)
ping ya.ru -c1 | grep -Po "(?<=time=)[0-9]+"
ещё вариант
ping ya.ru -c1 |sed -rn 's/.*time=([0-9]+).*/\1/p'Лёкгих путей не ищем
просто вы решаете задачу бессистемно, методом тыка. Вот и получаются такой уродливый быдлокод.
x=`ping -q -c1 ya.ru`; echo "${x#*=}"