Bash脚本增加每月的日期范围
我想增加我的工作节点的日期范围Bash脚本增加每月的日期范围,bash,macos,sh,Bash,Macos,Sh,我想增加我的工作节点的日期范围 `startdate="2020-01-01T15:04:05Z"` `endDate="2020-02-01T15:04:05Z` runWorker(startDate, endDate) { // once worker is done // increment startDate to `startDate="2020-02-01T15:04:05Z` `endDate="20
`startdate="2020-01-01T15:04:05Z"`
`endDate="2020-02-01T15:04:05Z`
runWorker(startDate, endDate) {
// once worker is done
// increment startDate to
`startDate="2020-02-01T15:04:05Z`
`endDate="2020-03-01T15:04:05Z`
}
我怎样才能创建一个bash脚本来完成这个任务呢?谢谢
我想创建一个日期范围,该范围将由正在提取日志并保存到存储器的工作人员使用,提取完成后,我想将范围增加一个月,以便使用新的数据范围来运行工作人员
从本质上说,我正在努力实现的目标
- 起始日期=2020-01-01T15:04:05Z
- 结束日期=2020-02-01T15:04:05Z
- 跑工
- 工人在规定的时间内完成工作
- 增加范围以覆盖另一个月范围
- 为新范围运行worker
日期
:
$ date --utc -d $startdate"+1 month" "+%FT%TZ"
2020-02-01T15:04:05Z
如果您使用ISO时区,您会:
$ TZ=UTC date -d $start"+1 month" "+%FT%T%Z"
2020-02-01T15:04:05UTC
请注意
Z
和%Z
的区别。在OSX下,我能想到的是:
#!/bin/bash
startDate="2020-01-01T15:04:05Z"
endDate="2020-02-01T15:04:05Z"
function runWorker() {
echo "Processing $startDate - $endDate"
echo "worker does it's stuff here"
# increment date range
startDate=$(TZ=UTC date -j -v+1m -f "%Y-%m-%dT%TZ" "$startDate" +%FT%TZ)
endDate=$(TZ=UTC date -j -v+1m -f "%Y-%m-%dT%TZ" "$endDate" +%FT%TZ)
}
# Repeat a bunch of times to skip one year
for i in `seq 0 14`; do
runWorker
done
它似乎有你想要的行为。您应该参考man-date
页面,因为我对格式字符串没有信心。以下部分非常重要:
按月调整日期本质上是不明确的,因为一个月
是一种长度可变的单位,取决于当前日期。这种
日期
调整以最直观的方式应用。首先,date试图保留月份中的日期。如果是
不可能,因为目标
月份短于当前月份,结果为目标月份的最后一天。例如,在5月份使用-v+1m
31将调整日期
到6月30日,而在1月30日使用相同的选项将导致日期调整为2月的最后一天。这
人们也相信这种方法
使shell脚本最有意义。然而,请注意,来回的次数是相同的
几个月可能会让你进入一个不同的阶段-
日期
我也不担心时区问题,希望你能自己解决
PS:我还认为,通过在开始日期中添加一个月来计算结束日期是更好的,但这也需要一些努力才能正确地完成,这样就不会有跳过的日期范围等等。类似于日期--date='$currentValue next month'+%FT%T%Z?例如,
date--date='2020-02-01T15:04:05Z下个月'+%FT%T%Z
在给定的日期上加上一个月我不完全理解你的评论@MikhailAntonov。你可以使用答案窗格。老实说,我也没有完全理解这个问题。是否要通过运行另一个脚本来替换一个脚本文件中的给定日期?或者只想更新包含日期的变量?如果后者使用我建议的参数调用date
program,应该可以做到这一点。如果你想做第一件事,应该把它输入到sed
中,再加上一些魔法检查我的更新问题。我得到了date:invalize选项--
我正在使用Mac操作系统。sh lokilogs.sh
用法:date[-jnRu][-d dst][-r seconds][-t west][v[+\124;-]val[ymwdHMS]。。。[-f fmt date |[[mm]dd]HH]mm[[cc]yy][.ss][+格式]如果删除--utc
并尝试使用TZ=GMT
处理它?我这里没有Mac电脑。