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


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Пинг через разные промежутки времени  (Прочитано 1276 раз)

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

Оффлайн _KuZNeC_

  • Автор темы
  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Нужно создать скрипт на баше
Пинг адреса одним пакетом
Если ответ на пинг получен, ждем 5 секунд и снова пингуем.
Если ответ на пинг получен, ждем 10 секунд и снова пингуем.
Если ответ на пинг получен, ждем 30 секунд и снова пингуем.
Если ответ на пинг получен, ждем 1 минуту и снова пингуем.
Все дальнейшие пинги посылаются с интервалом в 1 минуту.
Если на какой-либо из запросов ответ не получен, пингуем снова без дополнительных ожиданий.
Сделал скрипт, а он не запускается, понимаю что проблема с пробелами или отступами скорей всего, как решить?

#!/bin/bash

while [true]; do
if (ping -c 1 ya.ru);
then $k++
if [[k==1]];
then sleep 5s
elif [[k==2]];
then sleep 10s
elif [[k==3]];
then sleep 30s
elif [[k>=4]];
then sleep 60s
else $k=0
fi
done

При запуске ошибка
Цитировать
tmpscript: 18: tmpscript: Syntax error: "done" unexpected (expecting "fi")
Файл исполняемый.
od -c tmpscript
0000000   #   !   /   b   i   n   /   b   a   s   h  \n   #   t   e   s
0000020   t  \n  \n   #     320 261 320 265 321 201 320 272 320 276 320
0000040 275 320 265 321 207 320 275 321 213 320 271     321 206 320 270
0000060 320 272 320 273  \n   w   h   i   l   e       [   t   r   u   e
0000100   ]   ;       d   o  \n   i   f       (   p   i   n   g       -
0000120   c       1       y   a   .   r   u   )   ;  \n   t   h   e   n
0000140       $   k   +   +  \n   i   f       [   [   k   =   =   1   ]
0000160   ]   ;  \n   t   h   e   n       s   l   e   e   p       5   s
0000200  \n   e   l   i   f       [   [   k   =   =   2   ]   ]   ;  \n
0000220   t   h   e   n       s   l   e   e   p       1   0   s  \n   e
0000240   l   i   f       [   [   k   =   =   3   ]   ]   ;  \n   t   h
0000260   e   n       s   l   e   e   p       3   0   s  \n   e   l   i
0000300   f       [   [   k   >   =   4   ]   ]   ;  \n   t   h   e   n
0000320       s   l   e   e   p       6   0   s  \n   e   l   s   e   
0000340   $   k   =   0  \n   f   i  \n   d   o   n   e  \n
0000355

ТС не появлялся на Форуме более полугода по состоянию на 14/07/2019 (последняя явка: 28/06/2017). Модератором раздела принято решение закрыть тему.
--zg_nico
« Последнее редактирование: 14 Июля 2019, 05:15:04 от zg_nico »

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: скрипт на bash
« Ответ #1 : 28 Июня 2017, 14:58:10 »
Код: (bash) [Выделить]
#!/bin/bash
k=0
while true ; do
    if ping -c 1 ya.ru ; then
        if [ $k -le 4 ] ; then
            ((k++))
        fi
        case $k in
            1) sleep 5s ;;
            2) sleep 10s ;;
            3) sleep 30s ;;
            *) sleep 60s ;;
        esac
    else
        k=0
    fi
done
« Последнее редактирование: 28 Июня 2017, 15:34:21 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн _KuZNeC_

  • Автор темы
  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Re: скрипт на bash
« Ответ #2 : 28 Июня 2017, 15:19:21 »
Спасибо большое. Только если пинг один раз прошел, то пингует его сразу раз в минуту (без шагов 5, 10, 30сек), не пойму почему. Хотя все правильно.
if [ $k -le 4 ] ; then
            ((k++))
А что тут проверяется?
« Последнее редактирование: 28 Июня 2017, 15:35:15 от Azure »

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Пинг через разные промежутки времени
« Ответ #3 : 28 Июня 2017, 15:33:59 »
Поправьте
Код: (bash) [Выделить]
case $k in
что тут проверяется?
Что прошло не более 4 удачных попыток (зачем после этого увеличивать счетчик? Чтоб он буфер переполнил?)
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн _KuZNeC_

  • Автор темы
  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Re: Пинг через разные промежутки времени
« Ответ #4 : 28 Июня 2017, 15:37:51 »
Поправил, если ответ получен, то все равно следующая проверка через минуту.
По поводу счетчика понял, я думал больше максимального значения longint он не будет увеличиваться.
« Последнее редактирование: 28 Июня 2017, 15:45:45 от Azure »

Оффлайн Pilot6

  • Старожил
  • *
  • Сообщений: 14037
  • Xubuntu 18.04
    • Просмотр профиля
Re: Пинг через разные промежутки времени
« Ответ #5 : 28 Июня 2017, 15:41:13 »
_KuZNeC_,
А с какого перепугу ping -c 1 ya.ru имеет логическое значение? Я так понимаю, что он всегда будет true, так как есть вывод.
Я в личке не консультирую. Вопросы задавайте на форуме.

Оффлайн _KuZNeC_

  • Автор темы
  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Re: Пинг через разные промежутки времени
« Ответ #6 : 28 Июня 2017, 15:46:29 »
Выдержка из man ping
Цитировать
Если ping не получает ответных пакетов, то она завершит работу с кодом вы
     хода 1.  Если для пакетов указаны count и deadline , но принято менее
     count пакетов по истечении времени deadline , то программа также завершит
     работу с кодов выхода 1.  При других ошибках выход будет произведен с код
     ом 2.  Иначе программа завершает работу с кодом 0.  Эти значения позволяю
     т использовать коды выхода для определенияработоспособности серверов и ко
     мпьютеров.
« Последнее редактирование: 28 Июня 2017, 15:49:25 от Azure »

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Пинг через разные промежутки времени
« Ответ #7 : 28 Июня 2017, 15:48:27 »
_KuZNeC_, Ещё раз проверьте код: УМВР
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Pilot6

  • Старожил
  • *
  • Сообщений: 14037
  • Xubuntu 18.04
    • Просмотр профиля
Re: Пинг через разные промежутки времени
« Ответ #8 : 28 Июня 2017, 15:49:13 »
Что-то я видимо не понимаю. Пусть так, но разве 0 - это true?

Вот если if [ $? == 0 ], тогда понятно. Или в bash это как-то не так как везде?
Я в личке не консультирую. Вопросы задавайте на форуме.

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Пинг через разные промежутки времени
« Ответ #9 : 28 Июня 2017, 15:51:23 »
Или в bash это как-то не так как везде?
Именно. Когда касается кодов выхода 0 == true, !0 == false
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Pilot6

  • Старожил
  • *
  • Сообщений: 14037
  • Xubuntu 18.04
    • Просмотр профиля
Re: Пинг через разные промежутки времени
« Ответ #10 : 28 Июня 2017, 15:52:07 »
Именно. Когда касается кодов выхода 0 == true, !0 == false
Век живи, век учись ))
Я в личке не консультирую. Вопросы задавайте на форуме.

 

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