如何对 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
我有一个 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