Скрипт Bash - Как взять сегодняшнюю дату и считать ежемесячно в течение года - PullRequest
0 голосов
/ 02 сентября 2010

Я создал bash-скрипт, выполняющий файл PHP:

#!/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

Я просто незнать как.

Ответы [ 3 ]

3 голосов
/ 02 сентября 2010

Нет необходимости в сложной логике и арифметике.Не запускайте его около полуночи или изменений времени или последних дней месяца.

#!/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
1 голос
/ 02 сентября 2010

Этот сценарий:

#!/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 голосов
/ 02 сентября 2010

Ух, спасибо за все ваши ответы, я согласился на что-то вроде этого, это было проверено, немного грубовато, но отлично справляется со своими задачами.

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
...