shell 如何在bash脚本中迭代时间(作为参数)几天

vsikbqxv  于 2023-03-08  发布在  Shell
关注(0)|答案(1)|浏览(117)
Input_Date=$1
Input_hour=$2

date1to5=$(date -d "$Input_Date +5 days" +%Y%m%d)
Inputdate2=$(date -d "$Input_Date" +%Y%m%d)
while [ "$Input_Date" -lt "$date1to5" ];  do
        for hr in {00..23};
        do
                touch TEST_$Inputdate2$Input_hour"_"$Input_Date$hr.txt
        done
Input_Date=$(date -d "$Input_Date + 1 day" +%Y%m%d )
done

我有一个代码,这是创建文件每隔一个小时作为一个参数。问题是小时循环从00到23,但我想得到循环从输入小时到5天后,直到输入小时。
预期输出为:

TEST_2022031506_2022031506.txt
TEST_2022031506_2022031507.txt
TEST_2022031506_2022031508.txt
TEST_2022031506_2022031509.txt
.
.
.
.
TEST_2022031506_2022031903.txt
TEST_2022031506_2022031904.txt
TEST_2022031506_2022031905.txt
o2g1uqev

o2g1uqev1#

为了对日期执行算术运算,你可能需要使用Unix epoch time。这是我的方法:

#!/bin/bash
Input_Date=$1
Input_Date_epoch=$(date -d "$Input_Date" +%s)
Input_hour=$2
nowdate=$(date +%Y%m%d)

Target=5
Target_epoch=$((Target * 86400)) # 1 day = 86400 seconds
date1toTarget=$((Input_Date_epoch + Target_epoch))

while [ "$Input_Date_epoch" -lt "$date1toTarget" ]; do
    for hr in $(seq -f %02g 0 23); do
        touch TEST_"$nowdate""$Input_hour"_"$Input_Date""$hr".txt
    done
    Input_Date_epoch=$((Input_Date_epoch + 86400)) # +1 day
    Input_Date="$(date -d @"$Input_Date_epoch" +%Y%m%d)" # +1 day
done

相关问题