0

さて、opensslコマンドを実行して、期限切れのスクリプトの日付を取得します。そうすることで私にこれを与えます:

enddate=Jun 26 23:59:59 2012 GMT

それから私はすべてを切り取って、「6月」である月を残すだけです

スクリプトの次の部分は、証明書の有効期限が切れているかどうかをユーザーに通知することです。これを行うには、次のような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 に答える