如何对 bash 脚本中的参数应用多个验证?

How to apply multiple validations to an argument in bash script?

我有一个 bash 脚本,它 reads 从用户输入并验证输入的值是否存在(非空白)并且是 偶数 .我正在使用简洁的 test "" 来测试输入是否存在,但将其与其他验证方法结合使用似乎不起作用。我的验证方法是这样的:

readValidBookLength() {
  BOOKLENGTH=

  while ! [ isValidBookLength $BOOKLENGTH ] && ! [ isBookLengthNumeric $BOOKLENGTH ] && [isBookLengthEvenNumber $BOOKLENGTH]; do
    echo -e 'Book length? (HINT: An even number!): \c'
    read -r BOOKLENGTH
  done    
}

isValidBookLength() {
  test "" 
}

isBookLengthNumeric() {
  echo "I GOT HERE!"
  BOOKLENGTH=

  echo "${BOOKLENGTH}"
  reg='^[0-9]+$'
  if ! [[ $BOOKLENGTH =~ $reg ]] ; then
    return 1
  else
    return 0
  fi
}

isBookLengthEvenNumber() {
  echo "I GOT HERE 2!"
  BOOKLENGTH=
  echo "${BOOKLENGTH}"
  if [ $((BOOKLENGTH%2)) -eq 0 ] ; then
    return 0
  else
    return 1
  fi  
}

这种在多次验证后寻找有效输入的模式是否正确。我在这里错过了什么?

看起来您希望循环在任何测试失败时继续执行。这意味着您应该使用 ||,而不是 && 来组合测试。

您不应在调用验证函数之前放置 [[test 命令的简称。您还需要将所有测试组合在一起并否定整个组:

while ! { isValidBookLength "$BOOKLENGTH" && isBookLengthNumeric $BOOKLENGTH && isBookLengthEvenNumber $BOOKLENGTH; }; do