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

Я использую сценарий 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.

  • Расширение «$ @» для пользовательских переменных
  • Как установить переменную среды оболочки из файла autotools .am?
  • перечислить файлы и сохранить их в переменных
  • Объединение нескольких выходов grep в переменную
  • Использование «$ {a: -b}» для назначения переменных в скриптах
  • Как сохранить статус последнего выхода после теста
  • Передача переменной из одного сценария в другой
  • Сценарий Bash для заполнения шаблона
  • Как изменить переменные
  • Могу ли я определить тип переменной awk?
  • Что означает «$ {x %% *}» в sh?
  • Interesting Posts

    можно ли запускать `ssh-add <key>` только тогда, когда я ssh в поле? (от Cygwin)

    Пакет Fedora не содержит файлов?

    Локальный DNS-сервер отказывается запрашивать DNS

    Использовать текущую переменную среды пользователя в файле sudoers

    Возникли проблемы с базовым, если это утверждение

    как сказать lxc, чтобы не использовать / usr / share / lxc / templates для создания контейнера linux

    Команда ls без (скрытия) даты и времени

    Почему «исходная» команда Баша ведет себя по-разному при вызове функции?

    Разделители пустых строк многолистного регулярного выражения,

    Как проверить аппаратные ошибки с помощью программных методов?

    Скопировать файлы вставки в LibreOffice Writer не работает с рабочего стола Xfce

    «Multipass» скриптовая модификация большого файла на месте (уровень файловой системы)?

    Передача имен файлов в zmv

    Ошибка OpenVPN systemd, но работает

    Какое программное обеспечение или драйверы мне нужно отключить, чтобы использовать `flashrom`?

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