嗯...这是一个很好的蠕虫。
您创建的任何 shell 脚本可能无法在所有不同风格的 Unix/Linux 上运行。
BSD date 命令(可在 OS X 和 Solaris 上找到)在获取日期和验证格式方面做得很好。它要求您指定日期格式,但是一旦您这样做了,就没有问题了:
if date -j -f "%d-%m-%Y" "$DATE" 2>&1 > /dev/null # No output
then
echo "ERROR: Date '$DATE' is not a valid format."
exit 2
else
echo "Date is '$DATE'."
fi
Linux 和其他使用 GNU 日期的系统也可以验证日期,但使用不同的语法:
date -d "$DATE" 2>&1 /dev/null # With a bit of luck this will work...
if $? -ne 0
then
echo "ERROR: Date '$DATE' is not a valid format."
else
echo "Date is '$DATE'."
fi
我说 运气好 因为这取决于date 命令来确定您的日期格式。这通常有效,并且适用于您的 YYYY-MM-DD 格式,但可能会造成混淆:
想象一下:
$ DATE="15/6/2014" # It's June 15, 2014
$ date -d "$DATE"
date: invalid date `15/6/2014' # Invalid?
这是因为在我的时区,dd/mm/yyyy 格式不是有效格式。在我的时区,日期应该是mm/dd/yyyy。为了解决这个问题,您可以使用Wintermute's 建议并将日期格式化为 ISO 格式,然后再使用 GNU 的日期格式。
更通用的可能性是使用 Perl 或 Python 来确定日期是否正确:
if perl -mTime::Piece -e "Time::Piece->strptime(\"$DATE\", \"%Y-%m-%d\")" 2> /dev/null
then
echo "ERROR: Date '$DATE' is not a valid format."
else
echo "Date is '$DATE'."
fi
如果$DATE 不是%Y-%m-%d 格式的有效日期,则此Perl oneliner 将返回非零错误状态。