꼭 숫자값만 입력해주세요 [중복]

꼭 숫자값만 입력해주세요 [중복]

데이터 입력을 위한 쉘 스크립트가 있습니다. 파일을 생성하고 추가로 명령문을 생성하는 다양한 데이터 입력의 경우에도 마찬가지입니다. 다음 섹션이 있는데 입력한 값이 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

부동 소수점 숫자를 입력할 때 오류가 발생합니다. 문자열을 입력하면 금액이 0으로 설정됩니다.

답변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

참고: 이는 부동 소수점을 지원하지 않습니다.

관련 정보