我有一个脚本,我从用户创建的文件中获取日期字符串。日期可以是任何日期格式。需要检查字符串是否具有正确的日期格式。如果它是一个正确的日期格式,它应该继续它,否则它应该给出错误。
它可以是以下任何格式 -
YYYY/MM/DD HH24:MI:SS
YYYY/MM/DD HH24:MI
YYYY/MM/DD
到目前为止,我有以下代码 -
datetime="2100-02-31"
if ! date -d "$datetime" >/dev/null 2>&1; then
echo "Not a date"
fi
但它总是给出“不是约会”的输出。
答案 0 :(得分:0)
你有没有尝试其他日期? 2月没有31,当然它说"不是约会"。
答案 1 :(得分:0)
您输入的方式存在问题。您的原始代码应该有效。您可以按照尝试执行此操作,或尝试将命令替换与date
命令一起使用:
if ! $(date -d "$datetime" >/dev/null 2>&1); then
echo "Not a date"
fi
使用 bash版本4.3.33 ,它可以使用或不使用命令替换。
#!/bin/bash
while read -r datetime; do
echo " $(date -d "$datetime")"
if ! $(date -d "$datetime" >/dev/null 2>&1); then
echo "Not a date"
fi
done
exit 0
<强>输入强>
$ cat dat/datetime.txt
2012/10/21 19:51:31
2012/10/21 19:51
2012/10/21
something goofy
<强>输出强>
$ bash chkdate.sh <dat/datetime.txt
Sun Oct 21 19:51:31 CDT 2012
Sun Oct 21 19:51:00 CDT 2012
Sun Oct 21 00:00:00 CDT 2012
date: invalid date ‘something goofy’
Not a date
答案 2 :(得分:0)
提供的修复程序需要GNU日期。 -E 此外,就像用户界面元素一样,您可能希望让用户知道您的期望。 “非日期”答案无助于用户获得正确的格式。