dol*_*lly -1 shell scripting date
我的意思$yy
应该是2019
,2020
,2021
,等。
$yy
如果是的话应该失败 20199
201987
它应该只有 4 位数字。
如何检查这种情况..
yy =$1
if [ $yy > 4 ] ----- something like this
then
echo "Year should be 4 digits only"
fi
Run Code Online (Sandbox Code Playgroud)
在 POSIX 外壳中:
case $yy in
([[:digit:]][[:digit:]][[:digit:]][[:digit:]])
echo OK;;
(*)
echo >&2 not OK;;
esac
Run Code Online (Sandbox Code Playgroud)
您还可以将其放入如下函数中:
valid_year() case $1 in
([[:digit:]][[:digit:]][[:digit:]][[:digit:]])
true;;
(*)
false;;
esac
Run Code Online (Sandbox Code Playgroud)
然后在if
结构中使用,如:
if valid_year "$yy"; then
echo OK
else
echo >&2 not OK
fi
Run Code Online (Sandbox Code Playgroud)
使用 ksh93,您可以缩短为:
case $yy in
({4}(\d)) echo OK;;
(*) echo >&2 not OK;;
esac
Run Code Online (Sandbox Code Playgroud)
并在zsh -o extendedglob
:
case $yy in
([0-9](#c4)) echo OK;;
(*) echo >&2 not OK;;
esac
Run Code Online (Sandbox Code Playgroud)
使用 bash/zsh/ksh93/yash,您还可以使用:
if [[ $yy =~ [[:digit:]]{4} ]]; then
echo OK
else
echo >&2 not OK
fi
Run Code Online (Sandbox Code Playgroud)
要仅检查变量的长度(以字符数计),除了case $yy in (????)
,您还可以执行以下操作:
if [ "${#yy}" -eq 4 ]; then
echo OK
else
echo >&2 not OK
fi
Run Code Online (Sandbox Code Playgroud)
其他更复杂的 POSIX 方法使用该[
实用程序来检查变量是否为 4 个字符长并且不包含除数字以外的任何字符将使用:
if [ "${#yy}" -eq 4 ] && [ -n "${yy##*[![:digit:]]*}" ]; then
echo OK
else
echo >&2 not OK
fi
Run Code Online (Sandbox Code Playgroud)