2016-10-03 82 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