我想测试变量是否是日期(不是问题),但是如果变量具有正确的日期格式(yyyy-MM-dd)。
我试过了:
export DATE_REFRESH=01/01/1900
if ! date -d $DATE_REFRESH "+%Y-%m-%d"; then
echo "$DATE_REFRESH is not a valid date. Expected format is : yyyy-MM-dd"
fi
但它不起作用。
我可以试试这个:
if [[ $DATE_REFRESH == [0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] ]]
但我不想约会到33/19/2000 ......
答案 0 :(得分:4)
您可以使用此代码段:
isValidDate() {
if [[ "$1" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] && date -d "$1">/dev/null 2>&1; then
echo "valid"
else
echo "invalid"
fi;
}
<强>测试强>
isValidDate "1900-12-25"
valid
isValidDate "1900-14-25"
invalid
isValidDate "01/01/1900"
invalid
答案 1 :(得分:2)
您必须同时执行这两项测试,因为date
字符串可以是所有内容,请参阅联机帮助页:
--date = STRING是一个大多数免费格式的人类可读日期 字符串,如......
使用:
if ! [[ "$DATE_REFRESH" =~ ^[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}$ ]] \
|| ! date -d $DATE_REFRESH >/dev/null 2>&1; then
echo "$DATE_REFRESH is not a valid date. Expected format is : yyyy-MM-dd"
fi