如何处理不同用户输入的多个验证规则?

如何处理不同用户输入的多个验证规则?

在继续之前,我使用 Bash 脚本提示用户输入几个变量。如果我想创建静态验证规则并以“点菜”方式对用户输入执行它们,我将如何去做呢?

例子:

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...

答案1

$1函数在、等中获取参数$2。此外,在 shell 中,它们被称为不带括号,因此您的代码是几乎正确的。

您的函数语法也不太正确:您要么使用括号,要么使用单词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/untilif来检查函数的返回值,并重新提示或退出。

相关内容