在 shell 脚本中获取上个月

Getting previous month in shell script

现在,我正在使用以下代码行来使用我的 shell 脚本将上个月作为两位数获取:

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

但是,我想知道如果我 运行 一月份会 return 什么。我想在 12 月恢复 12,但我很难测试当我在 1 月 运行 脚本时它的行为方式。不管怎样,我可以测试一下吗?

您可以使用类似 三元 的结构来执行此操作,因为您只需要管理一个您已经知道的特定情况(当 lastMonth = 01 时)

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

首先,您需要使用 test-condition

测试您是否处于这种特殊情况
[ $lastMonth -eq "01" ] #return true if you're in January, else false

然后 control operators && (AND) 和 || (OR) 是这样使用的

如果测试return为真:

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

lastMonth 设置为 12 但没有递减,因为 OR 条件需要他的两个部分的 one 为真才能管理,左part return true 所以它不会评估他的正确部分

如果测试return为真:

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

由于lazy evaluationAND的右边部分将不会被计算,直接执行OR的右边部分条件,所以在正常情况下减少 lastMonth

这只是一种实现方式,例如 if 语句、数值操作等。