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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Нужна помощь с функциями BASH  (Прочитано 1233 раз)

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

Оффлайн boowoo

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Нужна помощь с функциями BASH
« : 01 Сентября 2010, 21:54:12 »
function gz
{
read -p "Файл "$1" является архивом.Разархивировать? y/n:" answer
case $answer in
y)
  tar -xzf $i
;;
n)
  break
;;
*)
  echo "Вы ввели неверный ответ.Повторите попытку"
;;
esac
}
...
gz $i $directory

Имеется вот такой кусок кода.
Требуется,чтобы функция  "начиналась" с начала в случае,если пользователь ввел символ отличный от y/n.
Раньше подобные вещи я решал при помощи рекурсии,но тут функции необходимы параметры,так что рекурсия отпадает.
Подскажите пожалуйста как это осуществить.
Может тут использовать другую конструкция,не case?

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Нужна помощь с функциями BASH
« Ответ #1 : 02 Сентября 2010, 13:55:53 »
Внезапно чуток ниже по форуму: https://forum.ubuntu.ru/index.php?topic=111529.0

Оффлайн boowoo

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Нужна помощь с функциями BASH
« Ответ #2 : 02 Сентября 2010, 21:57:41 »
Mam(O)n,спасибо вам за помощь!
Вариант,выложенный вами работает, но я не совсем разобрался как именно это работает.
Можете ли Вы как-то упростить Ваш вариант или добавить комментарии?

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Нужна помощь с функциями BASH
« Ответ #3 : 03 Сентября 2010, 10:39:31 »
Куда уж проще то...

#!/bin/bash
question() { # Описываем функцию, у которой первым параметром идёт текст вопроса
while # Начинаем цикл с ожиданием ответа y или n с составным условием:
echo -n "$1 [Y/N] " &&  # Печатаем вопрос, который идёт первым параметром функции. Результат echo ессно будет true
read answer || true &&  # Читаем ввод пользователя. Если read вдруг вернёт false то мы его превращаем в true
! grep -e '^[YyNn]$' <<< $answer > /dev/null; # Проверяем с помощью grep правильность ввода. Если ответ правильный то с помощью инвертирования EXIT_CODE grep'а мы вылетаем из цикла.
do echo -n "Введите либо N либо Y! "; # Тело цикла. Если мы попали в цикл, то значит ответ был неверный и просим повторить ввод.
done
return $(tr 'YyNn' '0011' <<< $answer) # Преобразовываем буквенный ответ в код возврата 1 или 0
}

if question "Напечатать всякую хрень?"; then # Задаём вопрос
echo "Всякая хрень !@#$%^&*" # При утвердительном ответе
echo "Ещё немного хрени" # Печатаем всякую хрень
else
echo "Хрени нет" # При отрицательном ответе
fi

Оффлайн boowoo

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Нужна помощь с функциями BASH
« Ответ #4 : 06 Сентября 2010, 01:39:42 »
Спасибо Вам, Mam(O)n !

 

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