내 현재 스크립트
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이 숫자인지 확인해야 하는 경우 정규식을 사용할 수도 있습니다.)