2016-10-03 39 views
0

現在,我使用下面的代碼行用我的shell腳本獲得前一個月爲一個兩位數字:獲得較上月shell腳本

lastMonth=$(date -d 'last month' +%m) 

不過,我想知道如果我在一月份運行它,這將返回什麼。我想12月份回到12月份,但我很難在1月份運行腳本時測試它的行爲。無論如何,我可以測試這個?

+1

它會按照您的預期工作。祝你好運。 – shellter

+0

您可以使用'date -s'來設置當前日期,然後測試其行爲。 –

+1

要查看'上個月'的特定日期,可以使用'date -d'2016-01-01上個月'+%m'打印出12個。 –

回答

1

您可以使用三元狀結構做這件事,因爲你需要管理

lastMonth=$(date +%m) 
[ $lastMonth -eq "01" ] && lastMonth=12 || ((lastMonth--)) 

首先,你需要測試你已經知道只有一種特定情況下(當lastMonth = 01)如果你在這種特殊情況下與測試條件

[ $lastMonth -eq "01" ] #return true if you're in January, else false 

然後兩個control operators& &)和||OR)使用這樣

如果測試返回true:

[ true ] && lastMonth=12 || ((lastMonth--)) 

lastMonth設置爲12,但不會減少,因爲狀況需要他的兩個部分的一個到對於管理是真實的,所以左側部分返回true,所以它不會評估他的右側部分

如果測試返回true:

[ false ] && lastMonth=12 || ((lastMonth--)) 

的右側部分不會由於評估的lazy evaluation,在正常情況下執行的OR條件直接右半部分,所以減量lastMonth

這只是一個做到這一點的方法,如if語句,數字操作等。

+0

'date'已經正確計算出來了,看起來像是一個矯枉過正沒有好處。 – karakfa

+0

我接受這個答案,但它超出了我所需要的範圍。謝謝 :) – user3266259