年份只能是 4 位数字,只有这样脚本才可以 paas

年份只能是 4 位数字,只有这样脚本才可以 paas

我的意思是$yy应该是2019,,,等等20202021

$yy如果是的话应该失败20199 201987

它应该只有 4 位数字。

如何检查这种情况..

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

答案1

在 POSIX shell 中:

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

相关内容