Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1456 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Problème avec une boucle for

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec une boucle for

n°1786593
hppp
Serveur@home
Posté le 14-09-2008 à 16:14:07  profilanswer
 

Salut a tous
 
je suis en trains de faire un script de backup mais j'ai une erreur et je pense qu'elle vient de ma boucle for qui fait une boucle sur les répertoires, etc, home et var pour pouvoir les sauvegarder avec rsync. Voilà le script:
 

Code :
  1. #!/bin/bash
  2. # Les Variables
  3. REP_BACKUP="/opt/backup/passerelle"
  4. # Début du Backup
  5. echo "Début de la sauvegarde le `date +%D` à `date +%H:%M`"
  6. # Boucle sur les répertoire etc, home et var
  7. for REP in etc home var ;  do
  8. echo "    *    Sauvegarde de  $REP_BACKUP"
  9. # Suprimmer le 5eme Jour de la 2eme Semaines
  10. if [ -d $REP_BACKUP/jour.5.semaine.2 ];
  11. then
  12. rm -r $REP_BACKUP/jour.5.semaine.2 ;
  13. fi;
  14. # 2eme Semaines
  15. if [ -d $REP_BACKUP/jour.4.semaine.2 ];
  16. then
  17. mv  $REP_BACKUP/jour.4.semaine.2 $REP_BACKUP/jour.5.semaine.2 ;
  18. fi;
  19. if [ -d $REP_BACKUP/jour.3.semaine.2 ];
  20. then
  21. mv $REP_BACKUP/jour.3.semaine.2 $REP_BACKUP/jour.4.semaine.2 ;
  22. fi;
  23. if [ -d $REP_BACKUP/jour.2.semaine.2 ];
  24. then
  25. mv $REP_BACKUP/jour.2.semaine.2 $REP_BACKUP/jour.3.semaine.2 ;
  26. fi;
  27. if [ -d $REP_BACKUP/jour.1.semaine.2 ];
  28. then
  29. mv $REP_BACKUP/jour.1.semaine.2 $REP_BACKUP/jour.2.semaine.2 ;
  30. fi;
  31. if [ -d $REP_BACKUP/jour.0.semaine.2 ];
  32. then
  33. mv $REP_BACKUP/jour.0.semaine.2 $REP_BACKUP/jour.1.semaine.2 ;
  34. fi;
  35. # 1eme Semaines
  36. if [ -d $REP_BACKUP/jour.4.semaine.1 ];
  37. then
  38. mv $REP_BACKUP/jour.4.semaine.1 $REP_BACKUP/jour.0.semaine.2 ;
  39. fi;
  40. if [ -d $REP_BACKUP/jour.3.semaine.1 ];
  41. then
  42. mv $REP_BACKUP/jour.3.semaine.1 $REP_BACKUP/jour.4.semaine.1 ;
  43. fi;
  44. if [ -d $REP_BACKUP/jour.2.semaine.1 ];
  45. then
  46. mv $REP_BACKUP/jour.2.semaine.1 $REP_BACKUP/jour.3.semaine.1 ;
  47. fi;
  48. if [ -d $REP_BACKUP/jour.1.semaine.1 ];
  49. then
  50. mv $REP_BACKUP/jour.1.semaine.1 $REP_BACKUP/jour.2.semaine.1 ;
  51. fi;
  52. if [ -d $REP_BACKUP/jour.0.semaine.1 ];
  53. then
  54. mv $REP_BACKUP/jour.0.semaine.1 $REP_BACKUP/jour.1.semaine.1 ;
  55. fi;
  56. # Syncronisation du REP_BACKUP
  57. rsync -ra --delete --link-dest=$REP_BACKUP/jour.1.semaine.1 $REP $REP_BACKUP/jour.0.semaine.1
  58. # Fin du Backup
  59. echo "Fin de la sauvegarde le `date +%D` à `date +%H:%M`"
  60. echo "========================================"


 
et l'erreur:

Code :
  1. # ./snapshot_leopard.sh
  2. Début de la sauvegarde le 09/14/08 à 16:24
  3. ./snapshot_leopard.sh: line 85: syntax error: unexpected end of file


 
merci de votre aide.

mood
Publicité
Posté le 14-09-2008 à 16:14:07  profilanswer
 

n°1786596
jlighty
Posté le 14-09-2008 à 16:18:59  profilanswer
 

heu, tu n'aurais pas oublié le "done" ?

n°1786612
hppp
Serveur@home
Posté le 14-09-2008 à 16:58:35  profilanswer
 

et je le met ou? dsl je suis vraiment pas un pro du shell.

n°1786614
jlighty
Posté le 14-09-2008 à 17:01:28  profilanswer
 

cf man bash

Citation :

for name [ in word ] ; do list ; done
              The list of words following in is expanded, generating a list of
              items.  The variable name is set to each element of this list in
              turn,  and  list is executed each time.  If the in word is omit?
              ted, the for command executes  list  once  for  each  positional
              parameter that is set (see PARAMETERS below).  The return status
              is the exit status of the last command that  executes.   If  the
              expansion of the items following in results in an empty list, no
              commands are executed, and the return status is 0.

n°1786622
hppp
Serveur@home
Posté le 14-09-2008 à 17:11:40  profilanswer
 

ok, merci beaucoup ça marche.

n°1786646
hppp
Serveur@home
Posté le 14-09-2008 à 18:13:35  profilanswer
 

j'ai une autre question
 
J'ai cette ligne: echo "Début de la sauvegarde le `date +%D` à `date +%H:%M` " >> $LOG
 
et >> $LOG correspond à quoi? il semblerai que ça soit pour écrire dans un fichier log mais sa ne marche pas.

n°1786649
jlighty
Posté le 14-09-2008 à 18:18:27  profilanswer
 

hppp a écrit :

j'ai une autre question
 
J'ai cette ligne: echo "Début de la sauvegarde le `date +%D` à `date +%H:%M` " >> $LOG
 
et >> $LOG correspond à quoi? il semblerai que ça soit pour écrire dans un fichier log mais sa ne marche pas.


ce ne serait pas un copier/coller foireux  provenant d'un site web (page HTML) ?
tu devrais avoir  

Code :
  1. echo "Début de la sauvegarde le `date +%D` à `date +%H:%M` " >> $LOG

Message cité 1 fois
Message édité par jlighty le 14-09-2008 à 18:19:04
n°1786661
hppp
Serveur@home
Posté le 14-09-2008 à 18:56:46  profilanswer
 

jlighty a écrit :


ce ne serait pas un copier/coller foireux  provenant d'un site web (page HTML) ?
tu devrais avoir  

Code :
  1. echo "Début de la sauvegarde le `date +%D` à `date +%H:%M` " >> $LOG



si  :D , ok merci

n°1786664
hppp
Serveur@home
Posté le 14-09-2008 à 19:12:44  profilanswer
 

je vous embête une dernier fois, je voudrai aussi qu'un mail soit envoyé à la fin du backup avec les echo dans le corp et pas en pièces joint, j'ai trouvé cette commande:
mailx -s "Backup Serveur" $ADRESSE < $LOG
 
Mais je sais pas comment en shell faire pour additionner touts les echo dans le corp du mail avec la variable $LOG en fait avoir une copie du fichier log dans le corp du mail. Merci de votre aide

n°1786680
jlighty
Posté le 14-09-2008 à 20:04:00  profilanswer
 

$LOG est le nom du fichier qui contiendra les messages à envoyer par mail.

Code :
  1. echo "blabla" > $LOG
  2. echo "blabla2" >> $LOG
  3. ...
  4. mailx -s "Backup Serveur" $ADRESSE < $LOG


 

mood
Publicité
Posté le 14-09-2008 à 20:04:00  profilanswer
 

n°1786689
hppp
Serveur@home
Posté le 14-09-2008 à 20:23:34  profilanswer
 

et si je veux genre
 

Code :
  1. LOG="/var/log/snapshot/snapshot-leopard.log"
  2. LOG_MAIL="/var/log/snapshot/tmp-snapshot-leopard.log"
  3. echo "blabla" >> $LOG AND $LOG_MAIL
  4. echo "blabla2" >> $LOG AND $LOG_MAIL
  5. ...
  6. mailx -s "Backup Serveur" $ADRESSE < $LOG_MAIL
  7. rm $LOG_MAIL


 
sa peut marcher ça? ou y a un autre mode?

n°1786693
jlighty
Posté le 14-09-2008 à 20:37:41  profilanswer
 

plus simple, tu fais :

Citation :

cp $LOG $LOG_MAIL


Pour info, ton opérateur "AND" peut être remplacé par la commande tee ( man tee pour plus d'info)
ex:

Citation :

echo "blabla"  | tee $LOG $LOG_MAIL


Message édité par jlighty le 14-09-2008 à 20:39:30
n°1786694
hppp
Serveur@home
Posté le 14-09-2008 à 20:39:32  profilanswer
 

non, je veux garder un historique dans $LOG donc si je fait ça je vais m'envoyer l'historique alors que sur $LOG_MAIL j'aurai que la dernier exécution. Merci

n°1786697
jlighty
Posté le 14-09-2008 à 20:51:29  profilanswer
 

hppp a écrit :

non, je veux garder un historique dans $LOG donc si je fait ça je vais m'envoyer l'historique alors que sur $LOG_MAIL j'aurai que la dernier exécution. Merci


alors un simple "cat $LOG_MAIL >> $LOG" suffira

n°1786699
hppp
Serveur@home
Posté le 14-09-2008 à 21:00:00  profilanswer
 

ouais mais c'est pas super propre, le tee me semble pas mal

n°1786701
jlighty
Posté le 14-09-2008 à 21:06:32  profilanswer
 

hppp a écrit :

ouais mais c'est pas super propre, le tee me semble pas mal


n'oublie pas l'option "-a" avec tee.
Cependant je préfère largement la 1er solution :

Code :
  1. echo "blabla " > $LOG_MAIL
  2. echo "blabla2" >> $LOG_MAIL
  3. #on archive les messages
  4. cat $LOG_MAIL >> $LOG


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Problème avec une boucle for

 

Sujets relatifs
Probleme de boucleProbleme affichage + Boucle while
MS-DOS : Boucle For, IF et Find imbriqués, probleme d'affectationprobleme de boucle pour
probleme avec une boucle if en cshellProbleme Boucle "pour" en nombre variable
[Batch] Problème de variable dans boucle forProblème "simple" (?) de boucle
Problème boucle de recherche sous VBA sur ExcelProbleme lien hypertexte, en boucle
Plus de sujets relatifs à : Problème avec une boucle for


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR