Unix 日期格式验证脚本

Unix 日期格式验证脚本

我编写了这个小型 unix shell 脚本来验证日期格式。我的脚本应该检查字符串是否采用 YYYYMMDDHHMISS 格式。如果不是这种格式,则应发送错误消息。

例如,我声明了一个变量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 

它总是显示“无效”。我想知道这里的错误是什么以及如何继续..谢谢

答案1

测试失败的原因是条件测试使用$?非零值。它非零的原因是因为date产生非零退出状态。如果你暂时停止date丢弃标准错误使用 ,> /dev/null 2>&1您将看到它生成的错误消息。这将帮助您确定问题。

date: invalid date ‘20150620223405’

意思date是您的日期格式不可接受。

你可以试试这个:

a=20150620223405
b=$(echo "$a" | sed 's/^\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)$/\1-\2-\3 \4:\5:\6/')
c=$(date "+%Y%m%d%H%M%S" -d "$b" 2>/dev/null)
if test $? -eq 0 -a "$c" = "$a"
then
    echo ok
else
    echo not ok
fi

相关内容