我必须创建一个Shell脚本,其中一个参数将是dd/mm/yyyy格式的日期。我的问题是,如何检查作为参数传递的日期是否真的遵循此日期格式?我尝试使用grep命令,如下所示:
if echo "$1" | grep -q '^[0-3][0-9]/[0-1][0-9]/[0-9]\{4\}$'但是它没有给出正确的格式,因为例如,一天可以是33,34,(.),这不是真正正确的格式。有人知道一些可以真正检查所传递的日期是否真的遵循dd/mm/yyyy格式的东西吗?
发布于 2013-09-11 01:49:31
使用日期
date "+%d/%m/%Y" -d "09/99/2013" > /dev/null 2>&1
is_valid=$?日期字符串必须是"MM/DD/YYYY“格式。
如果没有获得0,则日期格式无效。
发布于 2016-05-10 16:32:26
最简单的解决方案,仍然工作完美,是以下几点:
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。发布于 2018-05-04 05:38:43
此函数需要两个字符串,一个格式字符串,一个日期字符串。
格式字符串使用日期命令中的代码,但不包括“+”
如果提供的日期与给定格式匹配,则函数返回0,否则返回1。
码(my_script.sh)
#!/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输出
$ ./my_script.sh "05 Apr 2020"
05 Apr 2020
OK
$ ./my_script.sh "foo bar"
foo bar
KOhttps://stackoverflow.com/questions/18731346
复制相似问题