2014-01-22 133 views
0

我有以下bash腳本來增加指定的日期:DATE。使用shell腳本遞增日期

#!/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.謝謝。

+1

你是否檢查Solaris上的'date',如果它是Gnu date?如果它支持'-d'+ x day''表達式? – Kent

+0

我在Ubuntu上,無法複製這個錯誤,所以是的,它可能是Solaris 11上'date'的問題?此外,不知道它是否是一種類型,但應該明確的是,它不是重複您開始的$ DATE,而是重複今天的日期。 – dwanderson

+0

它通常不會,所以這一定是原因。 – fedorqui

回答

1

您的date版似乎不支持這種日期算術。但是,它應該支持轉換爲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 
+0

由於沒有訪問Solaris,所以很可能這個答案是無用的,因爲它假設實現'date'。 – chepner

+0

獲取錯誤:「./Date.sh:第15行:%s + 86400:語法錯誤:期望的操作數(錯誤標記爲」%s + 86400「)」。我評論了循環行,並設置了一個調試以回顯$ DATE(在循環之前),並且它回顯「%s」。 –

+0

檢查您的'date'版本的文檔,看看是否有辦法將給定的日期作爲自UNIX曆元以來的秒數。如果沒有,你可以忽略這個答案。 – chepner

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日期的整個目錄路徑。
+0

是的,我看了一下,發現GNU Coreutils的日期安裝在/ usr/local/bin/date下,並且工作正常。謝謝大家。 –