必ず数値のみ入力してください[重複]

必ず数値のみ入力してください[重複]

データ入力用のシェルスクリプトがあります。ファイルを生成し、さらにステートメントを生成するさまざまなデータ入力の場合も同様です。次のセクションがありますが、入力した値は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つの数字のみを入力できます。私の入力値は1から99999999999の間です。この問題をどのように解決できますか?

答え1

これもできます

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

浮動小数点数を入力するとエラーが発生します。文字列を入力すると、金額はゼロに設定されます。

答え2

シェルテストを使用して、独自の整数比較を実行できます。

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

注:これは浮動小数点をサポートしません。

関連情報