我正在尝试验证用户的输入,因此输入是数字而不是字符串或空值。使用案例我尝试这样做
echo "input a number"
read num1
case $num1 in
"" |*[a-zA-Z]*)
echo "please inter a valid number"
esac
echo "input 2nd number"
read num2
let sum=$num1+$num2
echo "$num1 + $num2=$sum"
但它并没有完全发挥作用。它给了我关于输入的警告——有没有办法同时验证这两个变量?
答案1
使用 bash,您可以使用正则表达式来验证数字:
#! /bin/bash
while [ -z "$REPLY" ]; do
read -p "Enter a valid number: "
if ! [[ "$REPLY" =~ ^[0-9]+$ ]] ; then
echo Bad number: $REPLY
REPLY=
fi
done
echo A valid number: $REPLY
程序不断读取输入,直到变量$REPLY
被设置read
。当数字正好匹配时,^[0-9]+$
循环结束。
答案2
要同时检查两个变量,您可以连接并检查。
这是更改的部分:
case $num1$num2 in
'' |*[!0-9]*)
echo "please enter a valid number"
exit
;;
您还可以exit
在打印错误后立即退出。
答案3
您可以定义一个自定义函数来执行此操作。
# func def.
isInt() {
case ${1-} in '' | *[!0-9]* ) return 1 ;; esac
return 0
}
# now use it as:
if isInt "$num1"; then
echo "$num1 is a valid integer"
else
echo "$num1 is not an integer"
fi
请注意,case
它的工作使用通配符而不是正则表达式。