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