我编写了这个小型 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