UNIX 쉘 스크립트: "대소문자"를 사용하여 사용자 입력 유효성 검사

UNIX 쉘 스크립트: "대소문자"를 사용하여 사용자 입력 유효성 검사

입력이 문자열이나 null이 아닌 숫자가 되도록 사용자 입력의 유효성을 검사하려고 합니다. 사용 사례

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정규식 대신 와일드카드를 사용하여 작동합니다 .

관련 정보