确保仅输入数字值

确保仅输入数字值

我有用于数据输入的 shell 脚本。对于创建文件和进一步生成语句的各种数据输入也是如此。我有如下部分,我想确保输入的值必须是数字,例如130,1300,13500或任何东西,但只有数字。目前我正在这样做:

echo -e "Enter loan amount :\c"
read amount
case $amount in
[0-9]) echo $amount >>manual-entry ;;
*)echo " Entered value is not number" ;;
esac

这仅允许一个号码进入。我的输入值可以是 1 到 99999999999 的任何值。我怎样才能解决这个问题

答案1

可能是这样的

typeset -i amount
read -rp 'Enter loan amount: ' amount
[[ "$amount" == 0 ]] && echo "enter a positive integer"
echo $amount >>manual-entry

这将在输入浮点数时产生错误。输入字符串会将 amount 设置为 0。

答案2

您可以使用 shell 测试对其自身执行整数比较:

read -rp 'Enter loan amount: ' amount
if [ "${amount:-0}" -eq "${amount:-1}" 2>/dev/null ]; then
  echo "$amount" >> manual-entry
else
  echo "Invalid input, number is expected" >&2
fi

我们正在进行比较${amount:-0},以确保这在输入${amount:-1}时仍然会失败。null否则,-eq运算符将因非整数比较而出错。如果输入是整数,它将通过。

注意:这不支持浮点

相关内容