2012-06-26 71 views
0

好吧,我運行openssl命令來獲取過期腳本的日期。這樣做使我這個:將月份字符串轉換爲整數Shell

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 
... 

顯然,這是做一個可怕的方式。有誰知道我能做什麼?

回答

5

好,你可以使用:

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

即轉換日期爲秒過去時代和比較這些

3

我會建議使用Petesh的答案,但這裏的建立關聯的方式數組,如果你有擊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之前的版本有猛砸,您可以使用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}' 

另一種方式在純擊(所有版本):

months="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec" 
month=Aug 
string="${months%$month*}" 
echo "$((${#string}/4 + 1))" 
+0

我喜歡它的創造性的最後答案。 – troutinator