bash中的用户输入日期格式验证

时间:2013-09-11 18:44:59

标签: bash validation date

所以我试图在bash中编写一个简单的脚本,询问用户输入日期 格式如下(YYYY-dd-mm)。不幸的是,我第一步陷入困境,即验证输入的格式是否正确。我尝试过使用' date'没有运气(因为它返回实际的当前日期)。我试图让这个变得尽可能简单。谢谢你的帮助!

2 个答案:

答案 0 :(得分:28)

使用正则表达式:

if [[ $date =~ ^[0-9]{4}-[0-3][0-9]-[0-1][0-9]$ ]]; then

或使用bash globs:

if [[ $date == [0-9][0-9][0-9][0-9]-[0-3][0-9]-[0-1][0-9] ]]; then

请注意,此正则表达式将接受9999-00-19之类的日期,但日期不正确。因此,在您使用此正则表达式检查其可能的正确性后,您应该验证数字是否正确。

IFS='-' read -r year day month <<< "$date"

这会将数字放入$year $day$month变量中。

答案 1 :(得分:3)

date -d "$date" +%Y-%m-%d 

后者是格式,-d允许输入日期。如果错误,它将返回一个可以通过管道传输到位桶的错误,如果它正确,它将返回日期。

格式修饰符可在日期man 1 date的联机帮助页中找到。这是一个包含3个日期数组的示例:

dates=(2012-01-34 2014-01-01 2015-12-24)

for Date in ${dates[@]} ; do
    if [ -z "$(date -d $Date 2>/dev/null)" ; then
       echo "Date $Date is invalid"
    else
       echo "Date $Date is valid"
    fi
done

请注意:在工作时向Google输入man date可以产生一些NSFW结果;)