Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: [Решено] Помогите с форматированием вывода ping  (Прочитано 1352 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Zloy1

  • Автор темы
  • Активист
  • *
  • Сообщений: 261
    • Просмотр профиля
Есть задумка выводить в окно терминала вывод ping отформатированный таким образом:

Если есть коннект с сайтом, '64 bytes from ... ms' то выводить символ точки .
Если 'Network is unreachable' то выводить x
В противном случае ?

Пока знаю как выводить точки, но не знаю как реализовать сравнение с 'Network is unreachable' и противный случай.

Вот что имею:
ping 192.168.1.1 | sed s/.*ms/./

Подскажите, как это можно сделать
« Последнее редактирование: 05 Августа 2011, 11:30:59 от Zloy1 »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Помогите с форматированием вывода ping
« Ответ #1 : 14 Июля 2011, 08:40:16 »
Не все программирование линейное (трубное). Иногда требуется ветвление.
Тогда делают так на Вашем примере.
1. Вывод ping запомнить в переменную.
2. Значение переменной последовательно сравнить с характерными значениями.
3. При удачном сравнении произвести необходимые действие.
« Последнее редактирование: 14 Июля 2011, 08:43:45 от alexander.pronin »

Оффлайн Vitsliputsli

  • Старожил
  • *
  • Сообщений: 1293
    • Просмотр профиля
Re: Помогите с форматированием вывода ping
« Ответ #2 : 14 Июля 2011, 08:52:04 »
если по аналогии с вашим примером, то:
ping 192.168.1.1 | sed "s/.*ms/./;s/.*Unreachable/x/"
А что за противный случай?

Если достаточно сообщать есть ответ или нет, то можно пинговать 1 раз и смотреть переменную $?. Правда тогда нельзя будет определить хост, если он не отвечает на пинги.

Оффлайн Zloy1

  • Автор темы
  • Активист
  • *
  • Сообщений: 261
    • Просмотр профиля
Re: Помогите с форматированием вывода ping
« Ответ #3 : 14 Июля 2011, 09:39:56 »
А что за противный случай?

Destination host unreachable. Кажется что-то еще может выводить, сейчас не вспомню.

ping 192.168.1.1 | sed "s/.*ms/./;s/.*Unreachable/x/"
Спасибо!


Пользователь решил продолжить мысль 14 Июля 2011, 10:21:38:
Еще нашел вот такую запись.
ping 192.168.1.1 | sed -e 's/.*ms$/\./' -e 's/Network\ is\ unreachable/n/' -e 's/Destination\ host\ unreachable/h/'

можно добавить еще секции -e '...'
« Последнее редактирование: 14 Июля 2011, 10:24:12 от Zloy1 »

Оффлайн Zloy1

  • Автор темы
  • Активист
  • *
  • Сообщений: 261
    • Просмотр профиля
Re: Помогите с форматированием вывода ping
« Ответ #4 : 05 Августа 2011, 11:30:23 »
Вот рабочий вариант:
#!/bin/bash
ping -W 1 192.168.1.1 2>&1| sed -e "s/.*ms/\./" -e "s/.*etwork.*/\x1b[0;31mn\x1b[0m/" -e "s/.*ost.*/\x1b[33mh\x1b[0m/" 

Если растянуть окно по вертикали шириной в один символ, то будет ползти вверх цепочка символов. если связь есть, то точка, а если связи нет, то h - если хость недоступен, n - если сети нет. Цвет символов разный.

 

Страница сгенерирована за 0.018 секунд. Запросов: 22.