Jai*_*chi 12 unix bash shell if-statement date
我必须创建一个Shell脚本,其中一个参数将是dd/mm/yyyy格式的日期.我的问题是,如何检查作为参数传递的日期是否真的遵循此日期格式?我尝试使用grep命令如下:
if echo "$1" | grep -q '^[0-3][0-9]/[0-1][0-9]/[0-9]\{4\}$'
Run Code Online (Sandbox Code Playgroud)
但它没有给出正确的格式,因为例如日期可以是33,34,(...),这不是真正正确的格式.任何人都知道可以真正检查过去的日期是否真的遵循格式dd/mm/yyyy?
P̲̳*_*͓L̳ 22
使用日期
date "+%d/%m/%Y" -d "09/99/2013" > /dev/null 2>&1
is_valid=$?
Run Code Online (Sandbox Code Playgroud)
如果没有得到0则日期格式无效.
Vic*_*yew 16
最简单的解决方案仍然可以完美运行,如下所示:
if [[ $1 =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] && date -d "$1" >/dev/null 2>&1
...
Run Code Online (Sandbox Code Playgroud)
它包括两个检查组合:
$1这种格式:NNNN-NN-NN您需要两个检查,因为:
date即使您的变量是另一种格式的有效日期,也会以代码0退出2016-13-45首先,使用正则表达式检查输入的形式。然后使用awk切换到mm/dd/yyyy并使用date来验证。您可以在声明中使用以下表达式if:
echo "$1" | egrep -q '^[0-3][0-9]/[0-1][0-9]/[0-9]{4}$' && date -d "$(echo "$1" | awk 'BEGIN{FS=OFS="/"}{print $2"/"$1"/"$3}')" >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
小智 5
此函数需要 2 个字符串,一个格式字符串,一个日期字符串
格式字符串使用 date 命令中的代码,但不包括“+”
如果提供的日期与给定的格式匹配,则该函数返回 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
Run Code Online (Sandbox Code Playgroud)
输出
$ ./my_script.sh "05 Apr 2020"
05 Apr 2020
OK
$ ./my_script.sh "foo bar"
foo bar
KO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56658 次 |
| 最近记录: |