gpt4 book ai didi

linux - GNU linux shell 脚本中的 while 循环很难将日期递增到下个月

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:30 25 4
gpt4 key购买 nike

这个循环应该打印从 9 月 28 日到 10 月 14 日的每一天的日期,但是在 9 月底之后它似乎变得困惑了。但是,它最终会移动到 10 月。语法或日期格式或递增有问题吗?

这是test2.sh中的代码:

#!/bin/sh
# this is meant to run on the data-science server, so uses GNU syntax
BASEDIR=$(dirname $0)
cd $BASEDIR

start_date=$(date -d 2015-09-28 +"%y%m%d")
end_date=$(date -d 2015-10-14 +"%y%m%d")

dateTs=$start_date

while [ $dateTs -le $end_date ]
do
date=$(date -d $dateTs +%Y-%m-%d)
printf '%s\n' $date
dateTs=$(($dateTs+1))
done

这是运行 sh test2.sh 的结果:

2015-09-28
2015-09-29
2015-09-30
date: invalid date ‘150931’

date: invalid date ‘150932’

date: invalid date ‘150933’

... [leaving out a bunch more of these] ...

date: invalid date ‘150997’

date: invalid date ‘150998’

date: invalid date ‘150999’

date: invalid date ‘151000’

2015-10-01
2015-10-02
2015-10-03
2015-10-04
2015-10-05
2015-10-06
2015-10-07
2015-10-08
2015-10-09
2015-10-10
2015-10-11
2015-10-12
2015-10-13
2015-10-14

...我很想知道我做错了什么。

最佳答案

您不能对日期字符串使用普通算术,因为大多数数字都不是有效日期。当您过了一个月的月底时,日期部分将超出可能的日期范围。当你过了年底,你就会有无效的月份。

date 命令允许您指定增量。使用:

start_date=2015-09-28
end_date=2015-10-14

date=$start_date

while [[ $date <= $end_date ]]
do
printf '%s\n' $date
date=$(date -d "$date + 1 day" +%Y-%m-%d)
done

关于linux - GNU linux shell 脚本中的 while 循环很难将日期递增到下个月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com