好吧所以我运行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
...
显然,这是一种可怕的方式。有谁知道我能做什么?
答案 0 :(得分:5)
好吧,你可以使用:
now=$(date +%s)
cert=$(date --date="$enddate" +%s)
if [ $cert -lt $now ]; then
echo "Old!"
fi
即。将日期转换为超过纪元的秒数并比较那些
答案 1 :(得分: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))"