Pb avec le symbole * dans une variable (liste le repertoire)

Pb avec le symbole * dans une variable (liste le repertoire) - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 30-12-2007 à 11:46:13    

Bonjour,
 
Je me prepare un script de modification de la crontab afin d'installer des sauvegardes automatiques et j'ai un probleme avec le symbole *
Dans mon script je commance a récupérer le jour puis l'heure souhaiter pour la sauvegarde puis je fais une sauvegarde avec  
 

Code :
  1. crontab -l > /tmp/tempcrontab

 
 
Mon probleme c'est que si tempcrontab n'est pas vide et que je le récupère dans une variable avec cat /tmp/tempcrontab les * me liste le répertoire dans la variable...
Pour exemple je teste mon tempcrontab avec un
 

Code :
  1. echo "* * * * * commande" >> /tmp/tempcrontab


 
Même probleme pour tout les jours de la semaine, si je fais un  
 

Code :
  1. if [ "$JOUR" == "8" ];
  2. then JOUR=$(*);
  3. fi


 
Cela me liste dans $JOUR...
 
Bon, pour le jour ce n'est pas vraiment un probleme puisque je vais faire un test sur JOUR égal a 8 et je traiterais mon echo d'une autre maniere mais pour récupérer mon tempcrontab cela est problematique car je voudrais l'utiliser pour tester la présence d'une sauvegarde.
 
Une idée ? Merci d'avance.

Reply

Marsh Posté le 30-12-2007 à 11:46:13   

Reply

Marsh Posté le 30-12-2007 à 12:14:03    

quelle distrib ?
 
quel shell ?
 
Si tu essaie en échappant : echo "\*" ?

Reply

Marsh Posté le 30-12-2007 à 12:37:37    

avec des simples quotes.
 
et j'ai pas tout compris pour le coup du JOUR=$(*);, tu veux que JOUR contienne le charactere * ? dans ce cas c'est '*' et non une evaluation de l'expression (avec $() ou ``)


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 30-12-2007 à 13:06:31    

fighting_falcon :
 
Debian et sh
\* liste aussi le repertoire courrant du script
 
zecrazytux :
 
'*' retourne aussi la liste du rep courrant
 
Voici la partie du code (en cour) en question :
 

Code :
  1. Sauvegarde ()
  2. {
  3. rm -f $fictmp
  4. CHOI1="1-Lundi"
  5. CHOI2="2-Mardi"
  6. CHOI3="3-Mercredi"
  7. CHOI4="4-Jeudi"
  8. CHOI5="5-Vendredi"
  9. CHOI6="6-Samedi"
  10. CHOI7="7-Dimanche"
  11. CHOI8="8-Tous_les_jours"
  12. I=1
  13. MENU=""
  14. PARAM=$CHOI1
  15. while [ -n "$PARAM" ]
  16. do
  17. PARAM1=`echo $PARAM | cut -d"-" -f1`
  18. PARAM2=`echo $PARAM | cut -d"-" -f2`
  19. MENU=$MENU"$PARAM1 $PARAM2 "
  20. let I=$I+1
  21. PARAM=$(eval echo $`eval echo $"CHOI$I"`)
  22. done
  23. let menu_height=$I
  24. $DIALOG --clear --no-tags --defaut-item-tag 8 --title $TITRE --menu "Choisissez le jour de sauvegarde" 0 0 "$menu_height" $MENU 2> $fictmp
  25. RETOUR=$?
  26. JOUR=$(cat $fictmp)
  27. case $JOUR in
  28. 1) JOURCHOIX="Lundi" ;;
  29. 2) JOURCHOIX="Mardi" ;;
  30. 3) JOURCHOIX="Mercredi" ;;
  31. 4) JOURCHOIX="Jeudi" ;;
  32. 5) JOURCHOIX="Vendredi" ;;
  33. 6) JOURCHOIX="Samedi" ;;
  34. 7) JOURCHOIX="Dimanche" ;;
  35. 8) JOURCHOIX="Tous_les_jours" ;;
  36. *) General ;;
  37. esac
  38. MESSAGEJ="Heure de la sauvegarde pour $JOURCHOIX"
  39. rm -f $fictmp
  40. $DIALOG --clear --backtitle "Choix de l'heure" --title $TITRE --timebox "$MESSAGEJ" 15 60 2> $fictmp
  41. HEUREMINUTES=$(cat $fictmp)
  42. rm -f /tmp/tempcrontab
  43. echo "* * * * * commande" >> /tmp/tempcrontab
  44. # traitement
  45. HEURE="${HEUREMINUTES:0:2}"
  46. MINUTES="${HEUREMINUTES:3:2}"
  47. if [ "$JOUR" == "7" ];
  48. then JOUR="0";
  49. fi
  50. if [ "$JOUR" == "8" ];
  51. then JOUR='*';
  52. fi
  53. echo $JOUR
  54. # crontab -l > /tmp/tempcrontab
  55. # TABLE=$(cat /tmp/tempcrontab)
  56. if $(cat /tmp/tempcrontab)=="";
  57. then Traitevide;
  58. else Avertir;
  59. fi
  60. # $DIALOG --title $TITRE --clear --yesno "ATTENTION ! \n Il est possible qu'il y ai des sauvegardes \n deja programmees. Veuillez verifier \n avant de valider celle ci." 12 35)
  61. # echo "* * * * * commande" >> /tmp/tempcrontab
  62. # crontab /tmp/tempcrontab
  63. # /etc/cron.d /etc/cron.weekly ? Message de fin ? cp oldcrontab newcrontab et crontab < newcrontab ?
  64. #case $? in
  65. # 0) $DIALOG --title $TITRE --clear --msgbox "ATTENTION ! \n Vous avez choisi d'ignorer \n les possibles sauvegardes programmees" 12 35 ;;
  66. # 1) General ;;
  67. # 255) General ;;
  68. #esac
  69. # General
  70. }


Message édité par PauseKawa le 30-12-2007 à 13:07:57
Reply

Marsh Posté le 30-12-2007 à 13:17:58    

y a une couille dans ton shell...
 

Citation :


[13:19][zecrazytux@zecrazylaptop] ~ $ echo '*'
*


 
Debian SID


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 30-12-2007 à 14:20:22    

Citation :

pk34@zeus:~$ echo '*'  
*


 
Pas dans mon shell, dans mon script


Message édité par PauseKawa le 30-12-2007 à 14:22:42
Reply

Marsh Posté le 30-12-2007 à 15:42:08    

tu a mis quel shebang ?


Message édité par zecrazytux le 30-12-2007 à 15:42:42

---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 30-12-2007 à 15:51:47    

testé avec #!/bin/bash : idem

Reply

Marsh Posté le 30-12-2007 à 16:22:19    

étrange... tu as essayé d'activer le debug, au cas ou ça filerai des infos intéressantes ?


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 30-12-2007 à 16:49:13    

pour info sous Debian, /bin/sh = lien symbolique sur /bin/bash
 
donc sh et bash c'est pareil ...
 
donc y'a un truc pas cool dans ton script, et je pense a priori a ton :

Code :
  1. sauvegarde ()
  2. {
  3. ...
  4. }


 
il s'agit vraiment d'une fonction que tu appeles ailleurs, ou tu as posté tout ton script, auquel cas il n'y a nul besoin de ces notations ...

Reply

Marsh Posté le 30-12-2007 à 16:49:13   

Reply

Marsh Posté le 30-12-2007 à 16:56:25    

Plus bizarre encore
 

Code :
  1. pk34@zeus:~$ echo $JOUR
  2. pk34@zeus:~$ JOUR='*'
  3. pk34@zeus:~$ echo $JOUR
  4. 000000050483.png 000000057670.png 2007-09-22-16-49-54.046-VirtualBox-29193.log 387EE263.gpg a trier back.jpg bin bootlogo brasero.bin brasero.toc brother Capture-Notebookcheck: Mobile Graphics Cards - Benchmark List - Mozilla Firefox.png (etc...)
  5. pk34@zeus:~$


 
Le code complet fighting_falcon ? Voici mais c'est (vraiment) pas fini bien :
 

Code :
  1. #!/bin/bash
  2. echo "ATTENTION !"
  3. echo "Script de test"
  4. echo "Ne pas utiliser en production"
  5. echo "PK34"
  6. TITRE="SAUVEGARDES"
  7. REPONSE=""
  8. touch /tmp/fictmp$$
  9. fictmp=/tmp/fictmp$$
  10. trap "rm -f $fictmp" 0 1 2 3 5 15
  11. if [ -z $DISPLAY ] ; then DIALOG=dialog ; else DIALOG=Xdialog ; fi
  12. Sortie ()
  13. {
  14. rm -f $fictmp
  15. clear
  16. exit
  17. }
  18. Infos ()
  19. {
  20. $DIALOG --title $TITRE --clear \
  21. --msgbox "ATTENTION ! \n Script de demonstration \n Ne pas utiliser en production \n PK34" 12 35
  22. General
  23. }
  24. Sauvegarde ()
  25. {
  26. rm -f $fictmp
  27. CHOI1="1-Lundi"
  28. CHOI2="2-Mardi"
  29. CHOI3="3-Mercredi"
  30. CHOI4="4-Jeudi"
  31. CHOI5="5-Vendredi"
  32. CHOI6="6-Samedi"
  33. CHOI7="7-Dimanche"
  34. CHOI8="8-Tous_les_jours"
  35. I=1
  36. MENU=""
  37. PARAM=$CHOI1
  38. while [ -n "$PARAM" ]
  39. do
  40. PARAM1=`echo $PARAM | cut -d"-" -f1`
  41. PARAM2=`echo $PARAM | cut -d"-" -f2`
  42. MENU=$MENU"$PARAM1 $PARAM2 "
  43. let I=$I+1
  44. PARAM=$(eval echo $`eval echo $"CHOI$I"`)
  45. done
  46. let menu_height=$I
  47. $DIALOG --clear --no-tags --defaut-item-tag 8 --title $TITRE --menu "Choisissez le jour de sauvegarde" 0 0 "$menu_height" $MENU 2> $fictmp
  48. RETOUR=$?
  49. JOUR=$(cat $fictmp)
  50. case $JOUR in
  51. 1) JOURCHOIX="Lundi" ;;
  52. 2) JOURCHOIX="Mardi" ;;
  53. 3) JOURCHOIX="Mercredi" ;;
  54. 4) JOURCHOIX="Jeudi" ;;
  55. 5) JOURCHOIX="Vendredi" ;;
  56. 6) JOURCHOIX="Samedi" ;;
  57. 7) JOURCHOIX="Dimanche" ;;
  58. 8) JOURCHOIX="Tous_les_jours" ;;
  59. *) General ;;
  60. esac
  61. MESSAGEJ="Heure de la sauvegarde pour $JOURCHOIX"
  62. rm -f $fictmp
  63. $DIALOG --clear --backtitle "Choix de l'heure" --title $TITRE --timebox "$MESSAGEJ" 15 60 2> $fictmp
  64. HEUREMINUTES=$(cat $fictmp)
  65. rm -f /tmp/tempcrontab
  66. echo "* * * * * commande" >> /tmp/tempcrontab
  67. # traitement
  68. HEURE="${HEUREMINUTES:0:2}"
  69. MINUTES="${HEUREMINUTES:3:2}"
  70. if [ "$JOUR" == "7" ];
  71. then JOUR="0";
  72. fi
  73. if [ "$JOUR" == "8" ];
  74. then JOUR='*';
  75. fi
  76. echo $JOUR
  77. # crontab -l > /tmp/tempcrontab
  78. # TABLE=$(cat /tmp/tempcrontab)
  79. if $(cat /tmp/tempcrontab)=="";
  80. then Traitevide;
  81. else Avertir;
  82. fi
  83. # $DIALOG --title $TITRE --clear --yesno "ATTENTION ! \n Il est possible qu'il y ai des sauvegardes \n deja programmees. Veuillez verifier \n avant de valider celle ci." 12 35)
  84. # echo "* * * * * commande" >> /tmp/tempcrontab
  85. # crontab /tmp/tempcrontab
  86. # /etc/cron.d /etc/cron.weekly ? Message de fin ? cp oldcrontab newcrontab et crontab < newcrontab ?
  87. #case $? in
  88. # 0) $DIALOG --title $TITRE --clear --msgbox "ATTENTION ! \n Vous avez choisi d'ignorer \n les possibles sauvegardes programmees" 12 35 ;;
  89. # 1) General ;;
  90. # 255) General ;;
  91. #esac
  92. # General
  93. }
  94. Traitevide ()
  95. {
  96. $DIALOG --title $TITRE --clear --yesno "ATTENTION ! \n Vous allez installer \n une nouvelle sauvegarde." 8 35
  97. }
  98. Avertir ()
  99. {
  100. $DIALOG --title $TITRE --clear --yesno "ATTENTION ! \n Il est possible qu'il y ai des sauvegardes \n deja programmees. Veuillez verifier \n avant de valider celle ci." 10 38
  101. }
  102. General ()
  103. {
  104. rm -f $fictmp
  105. CHOIX1="1-Programmer_une_sauvegarde"
  106. CHOIX2="2-Voir_les_sauvegardes_programmees"
  107. CHOIX3="3-Supprimer_une_sauvegarde"
  108. CHOIX4="4-Infos"
  109. I=1
  110. MENU=""
  111. PARAM=$CHOIX1
  112. while [ -n "$PARAM" ]
  113. do
  114. PARAM1=`echo $PARAM | cut -d"-" -f1`
  115. PARAM2=`echo $PARAM | cut -d"-" -f2`
  116. MENU=$MENU"$PARAM1 $PARAM2 "
  117. let I=$I+1
  118. PARAM=$(eval echo $`eval echo $"CHOIX$I"`)
  119. done
  120. let menu_height=$I
  121. $DIALOG --clear --title $TITRE --menu "Choisissez ce que vous voulez faire" 0 0 "$menu_height" $MENU 2> $fictmp
  122. RETOUR=$?
  123. REPONSE=$(cat $fictmp)
  124. case $REPONSE in
  125. 1) Sauvegarde ;;
  126. 2) echo "Voir les sauvegardes" ;;
  127. 3) echo "Supprimer les sauvegardes" ;;
  128. 4) Infos ;;
  129. *) Sortie ;;
  130. esac
  131. }
  132. General


Message édité par PauseKawa le 30-12-2007 à 16:57:00
Reply

Marsh Posté le 30-12-2007 à 17:06:16    

j'ai compris :D
c'est complètement logique !
 

Citation :


[17:04][zecrazytux@zecrazylaptop] ~ $ echo '*'
*
[17:04][zecrazytux@zecrazylaptop] ~ $ JOUR='*'
[17:04][zecrazytux@zecrazylaptop] ~ $ echo $JOUR
... listing ...


 
effectivement si ta variable contient * et que tu fait un echo dessus, le globbing s'applique !
 


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 30-12-2007 à 17:16:26    

Je suis une nouille... Mais bon c'est un dimanche d'apres fêtes diront nous...
 
Le fait est que j'utilise echo pour verifier mes variables au fur et a mesure et que j'ai bloquer sur le truc sans regarder ce que cela donne ensuite...  :sarcastic:  
 

Code :
  1. pk34@zeus:~$ unset JOUR
  2. pk34@zeus:~$ JOUR="*"
  3. pk34@zeus:~$ echo "test de jour :"$JOUR
  4. test de jour :*
  5. pk34@zeus:~$

 
 
Je retourne faire la suite.
Mes excuses pour le derangement et grand merci pour votre aide.


Message édité par PauseKawa le 30-12-2007 à 17:17:17
Reply

Marsh Posté le 31-12-2007 à 15:00:54    

le bash caï bien mais quand ça marche pô, ça saoûle !!!!
 
 :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  :D  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed