Как вы обрабатываете несколько правил валидации при различных пользовательских вводах?

Я использую сценарий Bash, чтобы предлагать пользователям несколько переменных перед продолжением. Если я хочу создать статические правила проверки и выполнить их на входах пользователя в режиме «a la carte», как бы я это сделал?

Пример:

function q1 () { echo "Do you have an answer?" read input # I know this is wrong but should get the idea across chkEmpty($input) chkSpecial($input) } function chkEmpty () { if [[ $input = "" ]]; then echo "Input required!" # Back to Prompt else # Continue to next validation rule or question fi } function chkSpecial () { re="^[-a-zA-Z0-9\.]+$" if ! [[ $input =~ $re ]]; then echo "Cannot use special characters!" # Back to prompt else # Continue to next validation rule or question fi } function chkSize () { etc... } etc... 

One Solution collect form web for “Как вы обрабатываете несколько правил валидации при различных пользовательских вводах?”

Функции получают свои аргументы в $1 , $2 и т. Д. Кроме того, в оболочке они называются без круглых скобок, поэтому ваш код почти прав.

Ваш синтаксис функции не совсем прав: вы используете либо parens, либо function слова. Наконец, вы можете вернуть результат (который работает как код выхода процесса) с return .

 chkEmpty() { if [[ "$1" = "" ]]; then echo "Input required!" return 1 # remember: in shell, non-0 means "not ok" else return 0 # remember: in shell, 0 means "ok" fi } 

Теперь вы можете назвать это следующим образом:

 function q1 () { echo "Do you have an answer?" read input chkEmpty $input && chkSpecial $input # && ... } 

Очевидно, вам нужно будет добавить код для обработки недопустимого ввода, например, путем повторного запроса или отмены сценария. Если вы используете while / until и if нужно проверить возвращаемые значения функции, а также выполнить reprompt или exit.

  • Присвоение нового значения непосредственно в индекс символа значения в массиве с zsh
  • Невозможно выполнить сценарий Bash, если / while
  • имя сценария скрипта echo text name для циклизации нескольких текстов
  • Установка переменной, значение которой зависит от другой переменной
  • Расширение «$ @» для пользовательских переменных
  • Использование «$ {a: -b}» для назначения переменных в скриптах
  • Назначить имя хоста переменной в ksh
  • Объединение нескольких выходов grep в переменную
  • Функция проверки переменной BASH
  • Как распространять значение переменной
  • Используйте sed для извлечения переменной из 1 файла и поместите ее в другую
  • Interesting Posts

    Какова точка режима виртуальной замены в Vim?

    Automake – проблема с установкой версии automake-1.14.1

    «Архив с однократной записью»: ext2 vs ext4 ^ has_journal vs

    Что делает «make install» в Makefile, который поставляется с ядром?

    LVM: отражается ли это? скопировать это медленно?

    Неявные системные вызовы в командах UNIX

    Как использовать шаблон с переменными в awk

    Существуют ли какие-либо соглашения для имени глобальной переменной, которые содержат результат функции?

    Греп, чтобы найти правильную строку, sed, чтобы изменить содержимое, а затем вернуть его в исходный файл?

    Как удалить устройство из пула

    Установка ksh в качестве стандартной оболочки в Redhat: Foolhardy?

    Возможно изменение цвета фона в unix через .profile?

    При использовании btrfs, почему значения «Размер», «Использовать» и «Использовать» из df не совпадают?

    Почему байты, которые я получаю, не являются байтами, которые я отправил?

    Как выполнить команду, не сохраняя ее в истории (даже для клавиши «вверх») в zsh

    Linux и Unix - лучшая ОС в мире.