0

好的,所以我运行一个 openssl 命令来获取过期脚本的日期。这样做给了我这个:

enddate=Jun 26 23:59:59 2012 GMT

然后我把所有东西都删掉了,只留下“六月”这个月

现在我的脚本的下一部分是告诉用户证书是否过期,为此我使用一个 if 语句,它看起来像这样:

if [ $exp_year -lt $cur_year && $exp_month -lt $cur_month ]; then
    echo "" 
    echo "Certificate is still valid until $exp_date"
    echo "" 
else
    echo ""
    echo "Certificate has expired on $exp_date, please renew."
    echo ""
fi

我不知道如何将月份转换为整数以进行比较。我想过做蛮力的方式是这样的:

Jan=01
Feb=02
Mar=03
...

显然,这是一种糟糕的做法。有谁知道我能做什么?

4

2 回答 2

5

好吧,你可以使用:

now=$(date +%s)
cert=$(date --date="$enddate" +%s)
if [ $cert -lt $now ]; then
   echo "Old!"
fi

即将日期转换为过去的秒数并比较那些

于 2012-06-26T15:32:12.947 回答
3

我建议使用 Petesh 的答案,但如果你有 Bash 4,这里有一种设置关联数组的方法:

months=(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
declare -A mlookup
for monthnum in ${!months[@]}
do
    mlookup[${months[monthnum]]=$((monthnum + 1))
done

echo "${mlookup["Jun"]}"    # outputs 6

如果你有版本 4 之前的 Bash,你可以使用 AWK 来帮助你:

month=Feb
awk -v "month=$month" 'BEGIN {months = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"; print (index(months, month) + 3) / 4}'

纯 Bash 中的另一种方式(任何版本):

months="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
month=Aug
string="${months%$month*}"
echo "$((${#string}/4 + 1))"
于 2012-06-26T16:46:33.147 回答