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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: bash скрипт until  (Прочитано 560 раз)

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

Оффлайн Viveda

  • Автор темы
  • Активист
  • *
  • Сообщений: 376
    • Просмотр профиля
bash скрипт until
« : 09 Августа 2015, 22:20:12 »
Не могу понять, где ошибка (только не говорить, что в ДНК :D )
Код until [ `nmcli con up id MySuperSecretVPN` ]; do
    r_status=$?
    echo "$r_status"
    ...
done

Соединение поднимается без ошибок, но код возврата дает 1 (Unknown or unspecified error), в итоге циклится :(

WBRGDS, Viveda

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: bash скрипт until
« Ответ #1 : 10 Августа 2015, 01:14:55 »
  • `nmcli con up …` выдает не статус команды а текстовый вывод
  • команда test ([]) при таком написании проверяет пустой вывод или нет (аналог опции -n)
  • until nmcli con up id MySuperSecretVPN ; do … правильный вариант записи
  • я бы лучше проверял по статусу соединения, а не командой запуска nmcli con status | grep MySuperSecretVPN
  • если возможно различные статусы выхода — то можно использовать варианты с case
Код: (bash) [Выделить]
status=false
until $status
do
    nmcli con up id MySuperSecretVPN
    case $? in
        [01]) status=true
                 … ;;
        *)    true ;;
    esac
done
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Viveda

  • Автор темы
  • Активист
  • *
  • Сообщений: 376
    • Просмотр профиля
Re: bash скрипт until
« Ответ #2 : 10 Августа 2015, 12:38:30 »
Azure,
спасибо, что-то я перемудрил (сам-же выхлоп nmcli и парсил через ``, переделал на until а [``] не убрал).
По статусу можно не проверять - оно точно на момент проверки не установлено, просто иногда нет коннекта, вот и смотрю статус выхода. case использую дальше, просто перед case еще функции, поэтому и r_status=$?
WBRGDS, Viveda

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: bash скрипт until
« Ответ #3 : 10 Августа 2015, 13:04:14 »
nmcli con up id MySuperSecretVPNпокажи строки.
Wars ~.o

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: bash скрипт until
« Ответ #4 : 12 Августа 2015, 16:17:15 »
Viveda,
Цитировать
в итоге циклится
А задержку в цикле не забыл поставить?
Так попробуй:
Код: (bash) [Выделить]
while :; do
nmcli con up id MySuperSecretVPN && break
sleep 1
done
или так:
Код: (bash) [Выделить]
while :; do
nmcli con up id MySuperSecretVPN && break || { [ $? = 1 ] && break; }
sleep 1
done

« Последнее редактирование: 12 Августа 2015, 18:31:29 от <Fryvrvywr> »

 

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