首页 > 解决方案 > 表达式的日期增量

问题描述

给定这个表达式:

#!/bin/bash

date=20210825
partitions=3

for i in $(seq 0 $partitions); do

    start_time=$(date -d "${date} + ${i}*24/$partitions hour" +%H)"000"
    stop_time=$(date -d "${date} + $((i + 1))*24/$partitions hour" +%H)"000"
    echo $start_time
    echo $stop_time
done

我正在尝试根据分区数评估日期增量,最终目标是 N 对 start_time 和 stop_time,其中 N=partitions。它一直在抱怨 start_time 和 stop_time 表达式的语法。用迭代器 j 做一个简单的增量是可行的,但它的任何算术目前都不起作用。

标签: bashshell

解决方案


运行您的代码显示:

日期:无效日期'20210825 + 0*24/3 小时'</p>

那是因为计算应该在$(())语法内。


将代码更改为:

#!/bin/bash

date=20210825
partitions=3

for i in $(seq 0 $partitions); do

    start_time=$(date -d "$((date + ($i * 24 / $partitions))) hour" +%H)"000"
    stop_time=$(date  -d "$((date + (($i + 1) * 24 / $partitions))) hour" +%H)"000"
    
    echo $start_time
    echo $stop_time
done

您可能需要更改这些顺序()以获得所需的输出。目前它显示:

04000
12000
12000
20000
20000
04000
04000
12000

您可以在此在线演示中进行测试。


推荐阅读