Bash 循环遍历日期

Bash 循环遍历日期

我正在尝试通过 bash 脚本从 psql 复制数据现在我陷入了循环我的 bash 脚本如下:

#!/bin/bash
DATEBEGIN=2016-03-01
DATEEND=2016-03-31
DATEMONTH=2016-03

echo "Copy data to /mnt/bigstorage/samples-$DATEMONTH.csv file, please wait..."

psql postgresql://XXX:XXX@localhost/XXX << EOF
       COPY (SELECT  *
FROM    sample
WHERE   timestamp >= '$DATEBEGIN' AND
        timestamp <= '$DATEEND') TO '/mnt/bigstorage/backup/samples$DATEMONTH.csv' DELIMITER ',' CSV;
EOF

使用上面的脚本,我需要每次更改月份,因为我们需要复制直到 2022 年的数据,我该如何循环日期?例如每月,但每天也可以。

通过以下脚本我得到了日期列表但我不知道如何实现这是我的脚本

start=2016-01-01
end=2022-01-01
while ! [[ $start > $end ]]; do
    echo $start
    start=$(date -d "$start + 1 day" +%F)
done

答案1

不知道我是否理解正确了这个问题,但你可以做这样的事情:

#!/bin/bash

start=2016-01-01
end=2022-01-01

while ! [[ $start > $end ]]; do

DATEBEGIN="$start"
start=$(date -d "$DATEBEGIN + 1 Month" +%F)
DATEEND=$(date -d "$start - 1 Day" +%F)
DATEMONTH=$(date -d "$DATEBEGIN" +%Y-%m)

echo "Copy data to /mnt/bigstorage/samples-$DATEMONTH.csv file, please wait..."

psql postgresql://XXX:XXX@localhost/XXX << EOF
COPY (SELECT  *
FROM    sample
WHERE   timestamp >= '$DATEBEGIN' AND
        timestamp <= '$DATEEND') TO '/mnt/bigstorage/backup/samples$DATEMONTH.csv' DELIMITER ',' CSV;
EOF

done

相关内容