Bashvalidationdate

我正在写一个shell脚本,我很困惑,为什么我的datevalidation代码不工作。 我尝试了以下解决scheme来find类似的问题,但is_valid始终设置为1:

date "+%m/%d/%Y" -d "$1" 2>1 > /dev/null //or.. date -d "2012-02-29" > /dev/null 2>&1 is_valid=$? #always set to 1, even when given a valid date 

我如何正确validationdate格式? date只能以MM / DD / YYYY格式有效

我也试过这个解决scheme: Linux Bash – date格式,但它总是拒绝date。

Mac OS X附带的BSD date不支持-d选项(或者更确切地说,它使用-d来表示完全不同的内容)。 要么安装GNU date ,要么使用以下来验证你的输入字符串:

 date -f "%Y-%m-%d" -j "2012-02-29" >/dev/null 2>&1 

-f提供输入格式, -j指示date以简单输出日期,而不是尝试设置系统时钟。

我想出了这个小功能:

 function isDateInvalid() { date -d "$1" "+%m/%d/%Y" > /dev/null 2>&1 res=$? echo "$res" } isDateInvalid "2012-02-219" 1 isDateInvalid "2012-02-29" 0 
 for y in {2013..2014}; do for m in {01..12}; do for d in {01..31}; do [[ ! "`date -jf %Y%m%d $y$m$d +%Y%m%d`" = "$y$m$d" ]] && continue echo $y.$m.$d done done done 

如果字符串匹配,循环将继续…