现在,我使用下面的代码行用我的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个。 –