使用shell脚本增加日期

时间:2014-01-22 14:48:37

标签: bash shell date solaris

我有以下bash脚本来增加指定的日期:DATE。

#!/usr/local/bin/bash

DATE=20130625

for i in {1..10}
do
     NEXT_DATE=$(date +%Y%m%d -d "$DATE + $i day")
     echo $i $NEXT_DATE
done

但是,它只是重复打印今天的日期如下。

1 20140122
2 20140122
3 20140122
4 20140122
5 20140122
6 20140122
7 20140122
8 20140122

感谢任何帮助。顺便说一句,操作系统是Solaris 11.谢谢。

2 个答案:

答案 0 :(得分:2)

Solaris date命令(至少在Solaris 8中找不到。我找不到Solaris 11联机帮助页)不支持您的语法,无法在date命令中进行计算。

您有两种选择:

  • 忘记使用date命令和BASH。相反,使用可以处理日期的脚本语言,如Perl,Python或Ruby。
  • Sunfreeware网站下载GNU Coreutils。 GNU Coreutils与大多数Linux系统上出现的Date命令相同。我相信它会将date命令放在/usr/local/bin中,您必须将其放在$PATH中,或者在命令中包含GNU日期的整个目录路径。

答案 1 :(得分:1)

您的date版本似乎不支持此类日期算术。但是,它应该支持转换为Unix时间戳和从Unix时间戳转换(有关详细信息,请参阅您的文档)。

DATE=$(date +%s "$DATE")   # Adjust as necessary
for i in {1..10}
do
     seconds=$(( $i * 86400 ))
     NEXT_DATE=$(($DATE + $seconds))
     echo $i $(date +%Y%m%d -d @$NEXT_DATE)  # Adjust as necessary
done