argv가 0에서 100 사이의 숫자인지 BASH 확인

argv가 0에서 100 사이의 숫자인지 BASH 확인

내 현재 스크립트

checkargv='^[0-9]+$'
if ! [[ $1 =~ $checkargv ]]
        then
        echo "[!] How many times? $0 [number]" >&2
        exit 1
fi

for (( i=1;i<=$1;i++ ))
do
        x=$[($RANDOM % 100) + 1]
        ./script.sh $x
done

내 argv $1은 이제 0에서 0에서 100까지의 숫자를 허용합니다. 상관없습니다. argv가 0에서 100까지의 숫자만 허용하도록 하려면 어떻게 해야 합니까?

답변1

if [ "$1" -lt 1 ] || [ "$1" -gt 100 ]; then
    echo 'error (out of range)' >&2
    exit 1
fi

이는 in 의 내용이 $1실제로 정수라고 가정합니다. 미리 확인해볼 수 있어요

case "$1" in
    ("" | *[!0-9]*)
        echo 'error (not a positive decimal integer number)' >&2
        exit 1
esac

exit$1십진수 이외의 숫자가 포함되어 있거나 비어 있으면 실행됩니다.

종합해보면:

case "$1" in
    ("" | *[!0-9]*)
        echo 'error (not a positive decimal integer number)' >&2
        exit 1
        ;;
    *)
        if [ "$1" -lt 1 ] || [ "$1" -gt 100 ]; then
            echo 'error (out of range)' >&2
            exit 1
        fi
esac

하지만 차례로 수행하는 것이 더 좋아 보일 수도 있습니다.

case "$1" in
    ("" | *[!0-9]*)
        echo 'error (not a positive decimal integer number)' >&2
        exit 1
esac

if [ "$1" -lt 1 ] || [ "$1" -gt 100 ]; then
    echo 'error (out of range)' >&2
    exit 1
fi

산술 연산자 는 64 [시작하더라도 숫자를 항상 소수로 처리합니다0로 .[$((...))

답변2

정규식 대신 산술을 사용하세요.

if ! (( num >= 0 && num <= 100 ))

(이것은 num이 숫자라고 가정합니다. $num이 숫자인지 확인해야 하는 경우 정규식을 사용할 수도 있습니다.)

관련 정보