2015-06-20 126 views
0

我写了这个小巧的Unix shell脚本来验证日期格式。我的脚本应该检查字符串是否处于YYYYMMDDHHMMSS格式。如果它不是这种格式,它应该发送一条错误消息。Unix日期格式验证

例如,我声明了一个变量a并为其分配了一个值。

a=20150620223405 
date "+%Y%m%d%H%M%S" -d $a > /dev/null 2>&1 
if [ $? -ne 0 ] 
then 
    echo "Invalid format" 
else 
    echo "Valid format" 
fi 

它总是显示为“格式无效”,我想知道这里的错误以及如何继续。

+0

'date -d $ a +“%Ymd ...'?我想如果您在'NONSENSE'中传入日期值,那'date'会返回一个错误,但无法访问GNU现在的日期;-(祝大家好运。 – shellter

回答

0

man date

日期字符串

的--date = STRING是大多自由格式人类可读的日期 串 为“太阳这样的,2004年2月29日16时21分42秒 - 0800“或”2004-02-29 16:21:42“或 甚至”下周四“。日期字符串可以包含指示日期,时间,时区,星期几,相对时间,相对日期和数字的项目。一个空字符串表示 一天的开始。日期字符串格式比在此处容易记录的 更复杂,但在信息文档中有详细描述。

而关于格式:

格式控制输出。

这意味着您无法验证您作为参数传递的日期。 date自行验证它,无论您提供的格式如何(正如man说FORMAT控制输出,而不是输入)。

验证日期我建议你使用正则表达式和grep (1)