2010-09-01 70 views
0

我做了一個bash腳本執行PHP文件數月回:bash腳本 - 如何把今天的日期和一年

#!/bin/bash 
php upgrade_attendance.php refresh_daily_attendance 2010-10-01 2010-11-01 
php upgrade_attendance.php refresh_daily_attendance 2010-09-01 2010-10-01 
php upgrade_attendance.php refresh_daily_attendance 2010-08-01 2010-09-01 
php upgrade_attendance.php refresh_daily_attendance 2010-07-01 2010-08-01 

等......這些日期必須回去,直到結束的一年。現在我可以簡單地在這個腳本中有很多行,並且在那裏有日期,或者從今天開始計算直到今年年底(或者一整年)date

我只是不知道如何。

+0

「現在我可以簡單地擁有萬噸線」? 「噸」你的意思是12? – 2010-09-02 00:01:51

+0

是的,我的意思是12 ...但是也許我會需要更多,因爲我已經修復了這個腳本在這個月期間的工作......但它很可能會在下個月使用......而且也許過了一個月,所以我將不得不繼續編輯它 – edumike 2010-09-02 00:06:15

回答

1

這個腳本:

#!/bin/bash 
let YEAR=$(date +%-Y) 
let MONTH=$(date +%-m) 
let DAY=$(date +%-d) 

for ((m = MONTH; m < 12; m++)); do 
    php upgrade_attendance.php refresh_daily_attendance "$YEAR-$((m))-$DAY" "$YEAR-$((m+1))-$DAY" 
done 

執行以下命令:

php upgrade_attendance.php refresh_daily_attendance 2010-9-1 2010-10-1 
php upgrade_attendance.php refresh_daily_attendance 2010-10-1 2010-11-1 
php upgrade_attendance.php refresh_daily_attendance 2010-11-1 2010-12-1 

我不知道到底是什麼這些日期的意思,所以有可能是一些關閉的情況的一個錯誤。

+0

你不能像'%02d'那樣在前面添加額外的零。我記得有一個類似的問題,'value too base for'錯誤,但不知怎的,'%'修正了它。只是一個想法;我不會使用bash。 – avacariu 2010-09-02 00:16:47

+0

@ vlad003:只需從日期規格中刪除短劃線即可獲得前導零:'+%m' – 2010-09-02 02:35:22

0

謝謝你的回覆,我已經解決了這樣的問題,它已經簽入,這有點粗糙,但是爲我的需求做的很好。

let YEAR=$(date +%-Y) 
let MONTH=$(date +%-m) 
let DAY=$(date +%-d) 
for ((m = MONTH; m < 12 && m > 0; m--)); do 
    php /srv/www/htdocs/$SCHOOL/tools/upgrade_attendance.php refresh_daily_attendance "$YEAR-$((m))-$DAY" "$YEAR-$((m+1))-$DAY" 
done 
3

不需要複雜的邏輯和算術。不要在午夜或時間更改或本月的最後幾天運行它。

#!/bin/bash 
for m in {0..14} 
do 
    beg=$(date -d "now - $((m+1)) months" "+%Y-%m-%d") 
    end=$(date -d "now - $m months" "+%Y-%m-%d") 
    echo php upgrade_attendance.php refresh_daily_attendance "$beg" "$end" 
done 

取出echo,使其工作

例子:

php upgrade_attendance.php refresh_daily_attendance 2010-08-01 2010-09-01 
php upgrade_attendance.php refresh_daily_attendance 2010-07-01 2010-08-01 
php upgrade_attendance.php refresh_daily_attendance 2010-06-01 2010-07-01 
php upgrade_attendance.php refresh_daily_attendance 2010-05-01 2010-06-01 
php upgrade_attendance.php refresh_daily_attendance 2010-04-01 2010-05-01 
php upgrade_attendance.php refresh_daily_attendance 2010-03-01 2010-04-01 
php upgrade_attendance.php refresh_daily_attendance 2010-02-01 2010-03-01 
php upgrade_attendance.php refresh_daily_attendance 2010-01-01 2010-02-01 
php upgrade_attendance.php refresh_daily_attendance 2009-12-01 2010-01-01 
php upgrade_attendance.php refresh_daily_attendance 2009-11-01 2009-12-01 
php upgrade_attendance.php refresh_daily_attendance 2009-10-01 2009-11-01 
php upgrade_attendance.php refresh_daily_attendance 2009-09-01 2009-10-01 
php upgrade_attendance.php refresh_daily_attendance 2009-08-01 2009-09-01 
php upgrade_attendance.php refresh_daily_attendance 2009-07-01 2009-08-01 
php upgrade_attendance.php refresh_daily_attendance 2009-06-01 2009-07-01 
相關問題