shell 如何检查传递的日期是yyyymmdd格式而不是yyyyddmm格式?

r7knjye2  于 2022-12-13  发布在  Shell
关注(0)|答案(1)|浏览(248)

我正在传递一个参数'bdate',日期作为参数。如何在shell脚本中创建一个函数来检查传递的日期是否是yyyymmdd格式而不是'yyyyddmm'?
有什么想法吗?

vnjpjtjt

vnjpjtjt1#

一般情况下,你无法解决这个问题,因为yyyddmm和dd在01到12之间在两种格式中都有效。这会给你一种错误的安全感。
您可以使用date,正如@49KWIC上面所解释的那样,或者如果您只想检测特定的问题,您可以这样做:

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

相关问题