如何在Bash脚本中按指定小时迭代日期至5天后对应小时?
调整Bash脚本生成指定时间范围文件的方法
原脚本通过接收日期和小时参数创建文件,但当前逻辑会每天生成24小时的文件,不符合「从输入小时开始,迭代至5天后同一小时前」的需求。以下是调整方案:
修改后的脚本
#!/bin/bash Input_Date=$1 Input_hour=$2 # 计算起始时间的时间戳(将输入的YYYYMMDD+HH转为时间戳) start_ts=$(date -d "${Input_Date} ${Input_hour}:00:00" +%s) # 计算结束时间:起始时间加5天(即5天后的同一小时) end_ts=$(date -d "${Input_Date} ${Input_hour}:00:00 +5 days" +%s) # 固定文件前缀:输入日期+输入小时 prefix="TEST_${Input_Date}${Input_hour}_" # 循环迭代每一小时 current_ts=$start_ts while [ $current_ts -lt $end_ts ]; do # 将当前时间戳转为YYYYMMDDHH格式 current_datetime=$(date -d "@$current_ts" +%Y%m%d%H) # 创建目标文件 touch "${prefix}${current_datetime}.txt" # 当前时间推进1小时(3600秒) current_ts=$((current_ts + 3600)) done
关键调整说明
- 用时间戳简化逻辑:通过时间戳计算和迭代,避免手动处理跨天、跨月的日期边界问题,精准控制每一个小时的生成。
- 明确时间范围:起始时间为输入的日期+小时,结束时间为起始时间加5天,循环中每次加1小时,刚好生成到5天前的最后一小时(比如输入
20220315 06,会生成到2022031905的文件)。 - 固定命名前缀:直接使用输入的日期和小时作为文件前缀,完全匹配需求中的命名格式。
原脚本问题分析
原脚本的嵌套循环会忽略输入小时,强制每天生成24小时的文件,导致生成范围不符合要求。改用时间戳迭代的方式,能精准覆盖需求的时间区间。
内容的提问来源于stack exchange,提问作者CaosWT
相关产品推荐
相关产品推荐

