首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证shell脚本中的日期格式

验证shell脚本中的日期格式
EN

Stack Overflow用户
提问于 2013-09-11 01:35:58
回答 13查看 89.1K关注 0票数 14

我必须创建一个Shell脚本,其中一个参数将是dd/mm/yyyy格式的日期。我的问题是,如何检查作为参数传递的日期是否真的遵循此日期格式?我尝试使用grep命令,如下所示:

代码语言:javascript
运行
复制
if echo "$1" | grep -q '^[0-3][0-9]/[0-1][0-9]/[0-9]\{4\}$'

但是它没有给出正确的格式,因为例如,一天可以是33,34,(.),这不是真正正确的格式。有人知道一些可以真正检查所传递的日期是否真的遵循dd/mm/yyyy格式的东西吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2013-09-11 01:49:31

使用日期

代码语言:javascript
运行
复制
date "+%d/%m/%Y" -d "09/99/2013" > /dev/null  2>&1
 is_valid=$?

日期字符串必须是"MM/DD/YYYY“格式。

如果没有获得0,则日期格式无效。

票数 28
EN

Stack Overflow用户

发布于 2016-05-10 16:32:26

最简单的解决方案,仍然工作完美,是以下几点:

代码语言:javascript
运行
复制
if [[ $1 =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] && date -d "$1" >/dev/null 2>&1
   ...

它包括合并两个检查:

  • 第一部分检查$1是否为这种格式:NNNN-NN-NN
  • 第二部分检查它是否为有效日期。

你需要这两张支票,因为:

  • 如果不执行第一次检查,date将退出代码0,即使变量是(另一格式的)中的有效日期。
  • 如果不执行第二次检查,那么即使对于2016-13-45这样的变量,也可以得到0。
票数 20
EN

Stack Overflow用户

发布于 2018-05-04 05:38:43

此函数需要两个字符串,一个格式字符串,一个日期字符串。

格式字符串使用日期命令中的代码,但不包括“+”

如果提供的日期与给定格式匹配,则函数返回0,否则返回1。

码(my_script.sh)

代码语言:javascript
运行
复制
#!/bin/bash

datecheck() {
    local format="$1" d="$2"
    [[ "$(date "+$format" -d "$d" 2>/dev/null)" == "$d" ]]
}

date_test="$1"

echo $date_test
if datecheck "%d %b %Y" "$date_test"; then
    echo OK
else
    echo KO
fi

输出

代码语言:javascript
运行
复制
$ ./my_script.sh "05 Apr 2020"
05 Apr 2020
OK
$ ./my_script.sh "foo bar"
foo bar
KO
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18731346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档