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

如何对bash脚本中的参数应用多个验证?,bash,.bash-profile,Bash,.bash Profile,我有一个bash脚本,读取来自用户的输入,并验证输入值是否存在(非空)以及是否为偶数。我正在使用简练的测试“$1”来测试输入是否存在,但将其与其他验证方法相结合似乎不起作用。我的验证方法如下: readValidBookLength() { BOOKLENGTH=$1 while ! [ isValidBookLength $BOOKLENGTH ] && ! [ isBookLengthNumeric $BOOKLENGTH ] && [isBookL

我有一个bash脚本,
读取来自用户的输入,并验证输入值是否存在(非空)以及是否为偶数。我正在使用简练的
测试“$1”
来测试输入是否存在,但将其与其他验证方法相结合似乎不起作用。我的验证方法如下:

readValidBookLength() {
  BOOKLENGTH=$1

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

isValidBookLength() {
  test "$1" 
}

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

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

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

这种在多次验证后寻找有效输入的模式正确吗。我在这里遗漏了什么?

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

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

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