4

我有一个使用用户输入的日期和时间参数的 Shell 脚本。日期为 mm/dd/yyyy 和时间为 HH:MM 。检查用户是否输入了正确日期的最简单方法是什么[比如月份应该小于 12 ......因为时间 MM 应该小于 60......我们在 UNIX 中是否有任何内置函数来检查时间戳?

4

3 回答 3

2

您可以使用 unix日期工具为您解析和验证它,并测试返回代码,例如

有效日期,返回码 0:

joel@bohr:~$ date -d "12/12/2000 13:00"
Tue Dec 12 13:00:00 GMT 2000
joel@bohr:~$ echo $?
0

无效日期,返回码 1:

joel@bohr:~$ date -d "13/12/2000 13:00"
date: invalid date `13/12/2000 13:00'
joel@bohr:~$ echo $?
1

您可以使用+FORMAT选项(man date)改变日期接受的输入格式

将它们放在一起作为一个小脚本:

usrdate=$1
date -d "$usrdate"  > /dev/null 2>&1
if [ $? -eq 0 ]; then
        echo "Date $usrdate was valid"
else
        echo "Date $usrdate was invalid"
fi
于 2011-01-06T12:55:35.640 回答
0

您可以grep用来检查输入是否符合正确的格式:

if ! echo "$INPUT" | grep -q 'PATTERN'; then
   # handle input error
fi

其中PATTERN是匹配所有有效输入且仅匹配有效输入的正则表达式。我将构建该模式留给您;-)。

于 2011-01-06T12:46:15.040 回答
0

(迟到的答案)

你可以使用的东西:

...
DATETIME=$1

#validate datetime..
tmp=`date -d "$DATETIME" 2>&1` ; #return is: "date: invalid date `something'"
if [ "${tmp:6:7}" == "invalid" ]; then
    echo "Invalid datetime: $DATETIME" ;
else
    ... valid datetime, do something with it ...
fi
于 2014-02-11T11:35:34.203 回答