我有用于数据输入的 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
运算符将因非整数比较而出错。如果输入是整数,它将通过。
注意:这不支持浮点