我正在传递一个参数'bdate',日期作为参数。如何在shell脚本中创建一个函数来检查传递的日期是否是yyyymmdd格式而不是'yyyyddmm'?有什么想法吗?
vnjpjtjt1#
一般情况下,你无法解决这个问题,因为yyyddmm和dd在01到12之间在两种格式中都有效。这会给你一种错误的安全感。您可以使用date,正如@49KWIC上面所解释的那样,或者如果您只想检测特定的问题,您可以这样做:
date
yyyymmdd() { case `echo "$1" | cut -b 5-6` in 01|02|03|04|05|06|07|08|09|10|11|12) return 0; ;; *) return 1; ;; esac } for d in 20220102 20220302 xxxx12xx 20221301 xxxxxxxx x do echo -n "$d "; yyyymmdd "$d" && echo valid || echo invalid done
并且其输出:
20220102 valid 20220302 valid xxxx12xx valid 20221301 invalid xxxxxxxx invalid x invalid
1条答案
按热度按时间vnjpjtjt1#
一般情况下,你无法解决这个问题,因为yyyddmm和dd在01到12之间在两种格式中都有效。这会给你一种错误的安全感。
您可以使用
date
,正如@49KWIC上面所解释的那样,或者如果您只想检测特定的问题,您可以这样做:并且其输出: