gpt4 book ai didi

linux - 有效的 shell 脚本输入日期格式

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:03 24 4
gpt4 key购买 nike

我已经使用了针对以下问题发布的方法,但我仍然遇到一些问题。

Validate date format in a shell script

$ ./check_date.sh 20190109
Input date format 20190109 # this should report error!

$ ./check_date.sh 2019-0109
[ERROR]: Invalid input date format 2019-0109

$ ./check_date.sh 2019-01-09
Input date format 2019-01-09

$ cat ./check_date.sh
#!/usr/bin/bash
date '+%Y-%m-%d' -d $1 > /dev/null 2>&1
if [ "$?" -ne 0 ]; then
echo "[ERROR]: Invalid input date format $1"
exit 1
else
echo "Input date format $1"
fi

如您所见,我预计输入 20190109 会导致脚本报告 ERROR,但它可以正常运行。

总而言之,我需要验证输入的日期字符串,使其严格遵循格式YYYY-MM-DD

问题>我应该怎么做才能让脚本按预期工作?

谢谢

最佳答案

以下测试应该有效:

if [[ "$1" =~ [0-9]{4}(-[0-9]{2}){2} ]] && date -d "$1" >/dev/null 2>&1; then
success
else
error
fi

它首先检查格式是否正确 NNNN-NN-NN,然后使用 date 检查日期是否有效。

为什么您的原始代码不起作用:您写道:

date '+%Y-%m-%d' -d $1 > /dev/null 2>&1

您“假设”字符串 '+%Y-%m-%d' 定义了输入格式,但它实际上定义了输出格式。 Date 能够获取各种输入字符串集合并相应地转换它们:

$ date -d "yesterday" '+%F'
$ date -d "2019-01-01 + 10 days" '+%F'
$ date -d "5 fortnight ago" '+%F'
$ date -d "12/13/1099" '+%F'

您不能强制日期假定输入的日期字符串具有给定的格式。

关于linux - 有效的 shell 脚本输入日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54131898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com