現在,我使用下面的代碼行用我的shell腳本獲得前一個月爲一個兩位數字:獲得較上月shell腳本
lastMonth=$(date -d 'last month' +%m)
不過,我想知道如果我在一月份運行它,這將返回什麼。我想12月份回到12月份,但我很難在1月份運行腳本時測試它的行爲。無論如何,我可以測試這個?
現在,我使用下面的代碼行用我的shell腳本獲得前一個月爲一個兩位數字:獲得較上月shell腳本
lastMonth=$(date -d 'last month' +%m)
不過,我想知道如果我在一月份運行它,這將返回什麼。我想12月份回到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語句,數字操作等。
'date'已經正確計算出來了,看起來像是一個矯枉過正沒有好處。 – karakfa
我接受這個答案,但它超出了我所需要的範圍。謝謝 :) – user3266259
它會按照您的預期工作。祝你好運。 – shellter
您可以使用'date -s'來設置當前日期,然後測試其行爲。 –
要查看'上個月'的特定日期,可以使用'date -d'2016-01-01上個月'+%m'打印出12個。 –