2017-05-22 61 views
-1

我必須運行UNIX腳本被多次用於不同日期的要求。腳本應該先執行2017-01-01,然後執行2017-02-01等。我們正在每月檢查數據。請有人可以幫我解決這個問題。謝謝。的Unix循環的日期

+2

這是'cron'實用程序是什麼(或者,如果你使用的是Linux,systemd定時器單元的某些版本)。 –

+0

謝謝。我不是在尋找預定的執行。但是,如果我現在運行腳本,則需要在1月1日,2月1日,3月1日至5月1日執行腳本。輸入值應該是每個月的第一天。 – NewToUnix

+0

哦,我想我明白了。 –

回答

0

您可以使用for循環迭代,在一般。您可以生成個月的序列與{01..12}seq -w 1 12,如下:

for date in 2017-{01..12}-01; do 
    echo Processing data for $date 
    # Use $date in some way 
done 

for month in $(seq -w 1 12); do 
    date=2017-$month-01 
    echo Processing data for $date 
    # use $date in some way 
done 

第一個將在猛砸工作,zsh的,和許多其他炮彈,但我不認爲保證爲他們中的任何人工作;第二個應該適用於任何類型的殼體。

+0

謝謝。有沒有辦法爲兩個日期運行腳本。例如,首先我需要運行該腳本查找所有1月1日和1月31之間的記錄,那麼我需要找到Feb1st和2月28日等之間的記錄。我認爲這是我們需要做的更多的理解要求。有沒有辦法在兩個日期之間循環腳本? – NewToUnix

+0

這更復雜,因爲你需要處理幾個月的不同長度。外殼沒有日期的固有概念,所以無論你需要用不同的語言來編寫程序來生成日期列表,你需要爲每個月份是多長時間查找表(取請考慮閏年!),或者如果給出諸如'2017-04-31'或'2017-02-29'之類的無效日期,則需要讓腳本優雅地失敗。改變輸入要求可能會更容易。 –

+0

這是我想要實現的。而不是複製多個日期的步驟,有沒有辦法把一個循環下面的邏輯,睡眠之間: '#!/ bin/bash '2017-03-01' 在「2017年3月31日」 的文件1 回聲$文件 做 回聲$文件1 #run工作與$文件$文件1 回聲「作業已完成」 做 做了文件 睡眠10S 在「2017- 04-01' 做 回聲$文件 的文件1在‘2017年4月30日’ 做 Ë $ file1 #運行$ file $ file1 echo「完成任務」 完成 完成「 – NewToUnix