2010-09-01 78 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