Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 获取shell脚本中的上个月_Bash_Date_Date Arithmetic - Fatal编程技术网

Bash 获取shell脚本中的上个月

Bash 获取shell脚本中的上个月,bash,date,date-arithmetic,Bash,Date,Date Arithmetic,现在,我正在使用以下代码行使用我的shell脚本将上个月作为两位数获取: lastMonth=$(date -d 'last month' +%m) 然而,我想知道如果我在一月份运行它,它会返回什么结果。我想在12月份得到12个,但我在1月份运行脚本时,很难测试它的行为。无论如何,我可以对此进行测试?您可以使用类似于三元结构的结构进行测试,因为您只需要管理一个您已经知道的特定案例(当lastMonth=01时) 首先,您需要测试在这种特殊情况下是否具有测试条件 [ $lastMonth -e

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

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

然而,我想知道如果我在一月份运行它,它会返回什么结果。我想在12月份得到12个,但我在1月份运行脚本时,很难测试它的行为。无论如何,我可以对此进行测试?

您可以使用类似于三元结构的结构进行测试,因为您只需要管理一个您已经知道的特定案例(当lastMonth=01时)


首先,您需要测试在这种特殊情况下是否具有测试条件

[ $lastMonth -eq "01" ] #return true if you're in January, else false
然后&&)和|)都是这样使用的

如果测试返回true:

[ true ] && lastMonth=12 || ((lastMonth--))
[ false ] && lastMonth=12 || ((lastMonth--))
lastMonth设置为12,但不递减,因为条件需要其两部分的一个为真,以便管理,左侧部分返回真,因此不会评估其右侧部分

如果测试返回true:

[ true ] && lastMonth=12 || ((lastMonth--))
[ false ] && lastMonth=12 || ((lastMonth--))
的右侧部分将不进行评估,这要归功于和直接执行条件的右侧部分,因此在正常情况下上个月减小


这只是一种方法,比如if语句、数字操作等等。

它将按照您的预期工作。祝你好运。你可以用
date-s
将当前日期设置为你想要的任何日期,然后测试它的行为。要查看某个特定日期的
last month
,你可以使用打印12的
date-d'2016-01-01 last month'+%m
,这似乎是一种没有好处的过度手段。我接受这个答案,但它超出了我的需要。谢谢:)