Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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
Shell脚本-查找上个月并将其传递给变量_Shell - Fatal编程技术网

Shell脚本-查找上个月并将其传递给变量

Shell脚本-查找上个月并将其传递给变量,shell,Shell,我需要一个scipt,它获取上个月的数据并将其写入变量。之后,我需要检查这个月是否是四分之一个月(三月、六月、九月、十二月),以及它是否是调用另一个脚本并以“Sep-2020”格式将月份作为参数传递。如果不是四分之一个月,请调用另一个脚本 monthyear="Sep-2020" if [[ quartermonth ]] then runscript1 $monthyear elif [[ not a quartermonth ]] then runscript2 $mo

我需要一个scipt,它获取上个月的数据并将其写入变量。之后,我需要检查这个月是否是四分之一个月(三月、六月、九月、十二月),以及它是否是调用另一个脚本并以“Sep-2020”格式将月份作为参数传递。如果不是四分之一个月,请调用另一个脚本

monthyear="Sep-2020"

if [[ quartermonth ]]
then runscript1 $monthyear
elif [[ not a quartermonth ]]
then runscript2 $monthyear
fi

您可以学习如何查找上一个月


bash应该在oracle Linux上可用;下面是一个bash版本:

#!/bin/bash

lastmoyr=$(date '+%b-%Y' --date='1 month ago')
lm=$(date '+%m' --date='1 month ago')
lm=${lm#0}
echo last month-year "$lastmoyr"
echo last month number "$lm"

# Mar Jun Sep Dec ==> 3 6 9 12
if [[ $((lm % 3)) == 0 ]]; then
    runscript1 "$lastmoyr"
else
    runscript2 "$lastmoyr"
fi

我不能对接受的答案发表评论,所以我将把它作为一个新的答案来写

注意,在某些情况下,接受的答案会产生意外的结果(错误的月份),例如,如果您在31日运行脚本

为了举例说明,在bashshell上运行这两个示例(如果您的date实用程序不支持所需的选项,请告诉我您使用的是哪一个,我将尝试调整它)

::根据接受的答案(模拟2020年10月31日)

上个月?:2020年10月--“10月”,可能不是你想要的

与(更可靠的解决方案)

上个月?:2020年9月—“9月”是正确的前一个月

发生这种情况是因为用于“相对”计算的date实用程序通常使用30天,而不是“一个月”

为了解决这个问题,您可以根据第1天(或第15天)计算上个月,而不是使用当前日期

改编@Milag脚本,看起来像

#!/usr/bin/env bash

lastmoyr=$(date  '+%b-%Y' -d "$(date +%Y-%m-1) 1 month ago")
lm=$(date '+%-m' -d "$(date +%Y-%m-1) 1 month ago")
echo last month-year "$lastmoyr"
echo last month number "$lm"

# Mar Jun Sep Dec ==> 3 6 9 12
if [[ $((lm % 3)) == 0 ]]; then
    runscript1 "$lastmoyr"
else
    runscript2 "$lastmoyr"
fi

你用的是什么shell?我猜那是一个操作系统;这个命令的输出是什么
echo$SHELL
@Milag输出是运行另一个脚本谢谢,我如何传递变量?使用
source runscript1.sh$monthyear
echo "Prior month? : $(date  '+%b-%Y' -d "$(date -d "2020-10-31") 1 month ago")"
echo "Prior month? : $(date  '+%b-%Y' -d "$(date +%Y-%m-1 -d "2020-10-31") 1 month ago")"
#!/usr/bin/env bash

lastmoyr=$(date  '+%b-%Y' -d "$(date +%Y-%m-1) 1 month ago")
lm=$(date '+%-m' -d "$(date +%Y-%m-1) 1 month ago")
echo last month-year "$lastmoyr"
echo last month number "$lm"

# Mar Jun Sep Dec ==> 3 6 9 12
if [[ $((lm % 3)) == 0 ]]; then
    runscript1 "$lastmoyr"
else
    runscript2 "$lastmoyr"
fi