Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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脚本增加每月的日期范围_Bash_Macos_Sh - Fatal编程技术网

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


使用GNU coretutils的
日期

$ 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电脑。