2010-09-01 3 views
0

J'ai fait un script bash l'exécution d'un fichier PHP:script Bash - Comment prendre la date d'aujourd'hui et comptent de nouveau par mois pendant un an

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

etc ... ces dates doivent revenir en arrière jusqu'à la fin de l'année. Maintenant, je peux simplement avoir des tonnes de lignes dans ce script avec ces dates là-bas ou compter jusqu'à la fin de cette année (ou une année complète) d'aujourd'hui date

Je ne sais pas comment.

+0

"Maintenant, je peux soit simplement avoir des tonnes de lignes" ?? Par "tonnes" pour vous dire 12? –

+0

Oui, je veux dire 12 ... mais peut-être que je vais avoir besoin de plus parce que j'ai corrigé ce script pour travailler pour la période de ce mois ... mais il sera probablement utilisé le mois prochain ... et le mois après peut-être aussi, donc je vais devoir continuer à l'éditer – edumike

Répondre

1

Ce script:

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

Exécute ces commandes:

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 

Je ne savais pas exactement ce que ces dates signifient, donc il y a probablement quelques erreurs hors par un.

+0

Vous ne pouvez pas avoir quelque chose comme '% 02d' pour ajouter ce zéro supplémentaire à l'avant. Je me souviens avoir eu un problème similaire avec l'erreur 'value too great for base', mais en quelque sorte le'% 'l'a corrigé. Juste une pensée; Je n'utilise pas beaucoup bash. – avacariu

+0

@ vlad003: Supprimez simplement le tiret de la spécification de date pour obtenir le zéro initial: '+% m' –

0

Wow merci pour toutes vos réponses, j'ai fini par me contenter de quelque chose comme ça, ça a été enregistré, c'est un peu grossier mais ça fonctionne bien pour mes besoins.

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

Pas besoin de logique compliquée et d'arithmétique. Ne l'exécutez pas vers minuit ou les changements d'heure ou les derniers jours du mois.

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

Retirez le echo pour le faire fonctionner

Exemple:

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 
Questions connexes