【发布时间】:2018-02-28 17:24:36
【问题描述】:
您好,我已经写了一些 bash 来生成格式为 YYYYDDMM 的日期。
我知道这并不完美,但最终会是:
生成一个包含 2 个相隔 31 天的日期的范围,并从至少今天 + 一天开始,较早的日期在今年年底结束。格式为 YYYYMMDD
month="$(awk -v min=1 -v max=12 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')"
day="$(awk -v min=1 -v max=31 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')"
year="$(date +%Y)"
if (( "${month}" < 10 )); then
month_proper="$(echo 0"${month}")"
else
month_proper="$(echo "${month}")"
fi
if (( "${day}" < 10 )); then
day_proper="$(echo 0"${day}")"
else
day_proper="$(echo "${day}")"
fi
echo month "${month}"
echo month with 0 if smaller than 10 : "${month_proper}"
echo day "${day}"
echo day with 0 smaller than 10 : "${day_proper}"
ok="$(date -d ""$year""${month_proper}""${day_proper}"" +"%Y%m%d")"
echo date with proper format "${ok}"
date -d "$year""${month_proper}""${day_proper}"
我必须向哪个方向扩展此脚本才能获得最终结果?我已经有了日期生成,但是没有检查是否比今天提前一天。
【问题讨论】:
-
我不明白你的要求。你想要每一对,随机一对,还是什么?脚本的期望输出究竟是什么?
-
month=$(($RANDOM % 12 + 1))(day类似)可能足够随机,无需使用awk。 -
请求的范围总是
YYYY1231..yyyy0131,不是吗?你只需要处理“今天”是 12 月 31 日的情况。 -
而不是生成月份和日期,只需找到距离 12 月 1 日的天数,在 1 和那个之间选择一个随机数,然后使用 GNU 的
date -d "today + 42 days"将其格式化为日期。自动处理闰年和一切。 -
是的,我需要满足上述要求的随机日期