【发布时间】:2019-08-16 08:03:39
【问题描述】:
我有一项任务需要从 API 中提取数据。我需要指定仅在给定月份的每天早上 7 点到晚上 9 点之间收集数据。
这将是一个 Bash 脚本,将使用 cron 在每月 1 日的 00:01 运行。
API 只接受 Epoch 时间的时间。脚本需要足够灵活,这样我就不必在一年中的每一天都编写代码。
我无法解决这个问题。我可以得到一个月的第一天,纪元时间为上午 7 点,纪元时间为晚上 9 点,API 将接受这两个纪元值并在两次之间查找。
我还可以在上午 7 点和晚上 9 点再次获取该月的最后一天。
我无法弄清楚早上 7 点和晚上 9 点之间的第一天和最后一天之间的天数。
START_LAST_MONTH=$(date "+%Y-%m-01" -d "-1 Month");
START_DAY_SEVEN_AM_EPOCH_DATE=$(date +%s -d"$START_LAST_MONTH 7am");
START_DAY_NINE_PM_EPOCH_DATE=$(date +%s -d"$START_LAST_MONTH 9pm");
END_LAST_MONTH=$(date "+%Y-%m-%d" -d "$START_LAST_MONTH +1 month -1 day");
END_DAY_SEVEN_AM_EPOCH_DATE=$(date +%s -d"$END_LAST_MONTH 7am");
END_DAY_NINE_PM_EPOCH_DATE=$(date +%s -d"$END_LAST_MONTH 9pm");
我正在考虑实现此目的的一种方法是在上午 7 点和晚上 9 点 START_DAY 变量中添加 86400 秒,通过这样做创建新变量,然后向上增加一天,直到 END_DAY 上午 7 点和晚上 9 点 Epoch 时间变量被命中。这对于每个月应该是灵活的,因为一个月的天数会有所不同。
但这超出了我的 bash 脚本编写技能,我正在学习如何实现这一点,所以任何帮助都将不胜感激,从另一个角度来看也很好。
更新:
我现在在 bash 脚本中有这个
#!/bin/sh -x
START_LAST_MONTH=$(date "+%Y-%m-01" -d "-1 Month");
START_DAY_SEVEN_AM_EPOCH_DATE=$(date +%s -d"$START_LAST_MONTH 7am");
START_DAY_NINE_PM_EPOCH_DATE=$(date +%s -d"$START_LAST_MONTH 9pm");
END_LAST_MONTH=$(date "+%Y-%m-%d" -d "$START_LAST_MONTH +1 month -1 day");
END_DAY_SEVEN_AM_EPOCH_DATE=$(date +%s -d"$END_LAST_MONTH 7am");
END_DAY_NINE_PM_EPOCH_DATE=$(date +%s -d"$END_LAST_MONTH 9pm");
until [ $END_DAY_SEVEN_AM_EPOCH_DATE ]
do
let ADD_ONE_DAY=$START_DAY_SEVEN_AM_EPOCH_DATE+86400
echo $ADD_ONE_DAY
done
但它根本没有回显 ADD_ONE_DAY 变量。使用 -X 调试时,它会到这里:直到 [ $END_DAY_SEVEN_AM_EPOCH_DATE ] 并且不做任何进一步的事情。
【问题讨论】: