@ymfront

Как в bash-скрипте ограничить ввод двумя вариантами?

Есть такой код c описанием того, что нужно ввести:

read -p "Нужно заменять логотип? (y/n) " logo

То есть пользователь должен ввести либо y, либо n. Как можно запретить ввод символов кроме y и n? А также ограничить длину ввода одним символом?
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Держи :) Копирайт мой

# Check entered answer on presence "yes" or "no" - another answers
# is prohibited
#
# Input:        $1 (string)     - user answer
#               $2 (string)     - warning sign. 
#                                 When parameter set to "warn", script claims about missed input
# Output:       $_isavalid (int) - 0, when answer is not valid
#                                  1, when answer is valid
check_yesno()
{
  local _check _warn
  
  _warn=${2:-no}

  # At start name claimed as NOT valid!
  _isavalid=0

  # Check on presence any data, passed as answer
  if [ ${#1} -eq 0 ]; then
    if [ $_warn = "warn" ]; then
      echo "There is no defaults, please answer \"Yes\" or \"No\""
    fi
    return
  fi

  # Check name through specified regexp
  regexp="^([Yy][Ee][Ss])$|^([Nn][Oo])$|^[Yy]$|^[Nn]$"
  _check=`echo $1 | grep -v -E -e "$regexp"`

  if [ ${#_check} -ne 0 ]; then
    return
  fi

  _isavalid=1
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Запретить, разумеется, ничего нельзя. Но можно ограничить количество введенных символов ( -n), проверять введенное значение, и выводить запрос повторно, если оно не соответствует контрольным.

Причем в данном конкретном случае можно проверить только на у, а любой другой ввод расценивать, как "нет".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы