연도는 4자리만 가능하며, 그 경우에만 스크립트가 paas일 수 있습니다.

연도는 4자리만 가능하며, 그 경우에만 스크립트가 paas일 수 있습니다.

내 말은 ,,,,등이 $yy되어야 한다는 뜻입니다 .201920202021

$yy그렇다면 실패해야 한다20199 201987

4자리 숫자만 가능합니다.

이 상황을 확인하는 방법..

yy =$1
if [ $yy > 4 ] ----- something like this
then
echo "Year should be 4 digits only"
fi

답변1

POSIX 셸에서:

case $yy in
  ([[:digit:]][[:digit:]][[:digit:]][[:digit:]])
    echo OK;;
  (*)
    echo >&2 not OK;;
esac

다음과 같은 함수에 넣을 수도 있습니다.

valid_year() case $1 in
  ([[:digit:]][[:digit:]][[:digit:]][[:digit:]])
    true;;
  (*)
    false;;
esac

그런 다음 if다음과 같은 구성에서 사용하십시오.

if valid_year "$yy"; then
  echo OK
else
  echo >&2 not OK
fi

ksh93을 사용하면 다음과 같이 단축할 수 있습니다.

case $yy in
  ({4}(\d)) echo OK;;
  (*) echo >&2 not OK;;
esac

그리고 zsh -o extendedglob:

case $yy in
  ([0-9](#c4)) echo OK;;
  (*) echo >&2 not OK;;
esac

bash/zsh/ksh93/yash를 사용하면 다음을 사용할 수도 있습니다.

if [[ $yy =~ [[:digit:]]{4} ]]; then
  echo OK
else
  echo >&2 not OK
fi

문자 단위의 변수 길이만 확인하려면 case $yy in (????)대신 다음을 수행할 수 있습니다.

if [ "${#yy}" -eq 4 ]; then
  echo OK
else
  echo >&2 not OK
fi

다른 더 복잡한 POSIX 방법은 이 [유틸리티를 사용하여 변수의 길이가 4자이고 숫자를 제외한 문자가 포함되어 있지 않은지 확인합니다.

if [ "${#yy}" -eq  4 ] && [ -n "${yy##*[![:digit:]]*}" ]; then
  echo OK
else
  echo >&2 not OK
fi

관련 정보