lou*_*gle 6 ksh shell-script date
有没有办法检查日期参数的格式是否正确(YYYY-MM-DD)?
我从网上得到了这个,但它对我不起作用:
date "+%Y-%m-%d" -d "2015-10-11" > /dev/null 2>&1
echo $?
Run Code Online (Sandbox Code Playgroud)
我期待一个0结果,但事实并非如此。有人可以告诉一些其他方式吗?
这将检查bash(使用内置正则表达式匹配)中的正确格式(YYYY-MM-DD ):
if [[ $1 =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]
then echo "Date $1 is in valid format (YYYY-MM-DD)"
else echo "Date $1 is in an invalid format (not YYYY-MM-DD)"
fi
Run Code Online (Sandbox Code Playgroud)
跑:
./script.sh 2015-12-10
输出:
Date 2015-12-10 is in valid format (YYYY-MM-DD)
它不检查日期本身是否有效,只检查格式(如问题中所述,“检查日期参数的格式是否正确(YYYY-MM-DD”))
如果您需要检查日期格式并验证日期值,请尝试以下操作:
if [[ $1 =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] && date -d "$1" >/dev/null
then echo "Date $1 is valid and matches the format (YYYY-MM-DD)"
fi
Run Code Online (Sandbox Code Playgroud)
这将丢弃通过正则表达式匹配的无效日期,例如 0000-88-77。
(此建议归功于@glenn jackman。)