UNIX shell 脚本:使用“case”来验证用户的输入

UNIX shell 脚本:使用“case”来验证用户的输入

我正在尝试验证用户的输入,因此输入是数字而不是字符串或空值。使用案例我尝试这样做

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它的工作使用通配符而不是正则表达式。

相关内容