범위의 숫자가 < 0, 무한대인지 테스트합니다.

범위의 숫자가 < 0, 무한대인지 테스트합니다.

질문이 있어요

If [[ * ]]
then
continue

else
exit 1
fi

-d 3예를 들어 내 스위치에 대한 인수가 유효한 양의 십진 정수( 에서 까지의 하나 이상의 ASCII 문자 시퀀스) 인지 테스트하고 싶습니다 . 그 이후에는 숫자만 가능합니다. 다른 모든 것은 끔찍합니다. 대신 무엇을 넣어야할지 모르겠습니다.09-d[0,infinity)*

도와주세요? -d위치 뒤의 매개변수입니다 $2.

답변1

질문과 의견에서 $2음수가 아닌 정수여야 합니다.

if [[ "$2" =~ ^[0-9]+$ ]]
then
...

또한 if소문자로 쓰여 있다는 점에 유의하세요 i.

사용 중인 Bash 버전이 정규식(<3.x)을 지원하지 않는 경우 다음을 사용하여 grep어려운 작업을 수행할 수 있습니다.

if printf "%s\n" "$2" | grep -qE '^[0-9]+$'
then
...

하지만 보세요스티븐의 코멘트이 접근 방식에는 주의 사항이 있을 수 있습니다.

답변2

Bourne과 같은 쉘의 경우(즉, 1970년대로 거슬러 올라감):

case $2 in
  "" | *[!0-9]*) echo >&2 not OK; exit 1;;
  *) echo OK;;
esac

관련 정보