年は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

おすすめ記事