[Ubuntu-QC] Aide pour déboguer un petit script.sh

Lami René lami at webestrie.com
Ven 16 Avr 03:53:56 BST 2010


Bonjour Philippe,

Encore une fois, ta contribution est d'une qualité inestimable et 
grandement appréciée !

Maintenant, tout fonctionne à merveille ! Bravo !

En pièce jointe, ma version finale, testée avec tous les cas de figure 
possibles.

Puis-je ajouter ton nom ou ton pseudonyme à la liste des contributeurs 
dans la page du Wiki ou préfères-tu le faire par toi-même ?

Si c'est oui pour le pseudonyme, que souhaites-tu comme pseudonyme ?

Mes autres commentaires dans le texte...

Philippe Gauthier a écrit :
> Bonjour!
>
> Je vais couper un peu dans les citations pour pas trop alourdir...
>
> Le jeudi 15 avril 2010 à 20:29 -0400, Lami René a écrit :
>   
>>>   mkdir -p ~/PointDeRestauration
>>>       
>> OK, si je comprends bien, que le dossier existe ou pas on demande sa 
>> création et cela ne cause aucun problème, mais cela rend la structure du 
>> script plus simple ! Est-ce une bonne interprétation de ton propos ?
>>     
> Exactement. Chaque outil a une "job" et la "job" de mkdir c'est de créer
> un répertoire. Le "-p" vient seulement lui demander de ne pas paniquer
> si le répertoire n'existe pas, ou de créer plusieurs répertoires
> imbriqués si nécessaire.
>   
Merci pour le détail du "-p", c'est toujours apprécié. !
>> Est-ce que le « done » fait partie de la boucle du « case » ?
>>     
> Le "done" était la contrepartie de "while []; do".
>   
OK, merci !
Si la formation et la certification sont disponibles à Sherbrooke en 
français, ça pourrait m'intéresser !

S'il y a quelque chose en français, pourrais-tu me fournir des coordonnées ?
>> Voici ma dernière version du script en y incorporant, je crois, toutes 
>> tes suggestions :
>>
>> #!/bin/bash
>> nomDossier="~/PointDeRestauration/"
>>     
> Pour des raisons que j'ignore, il faut enlever les guillemets pour que
> ça fonctionne correctement. Sinon, cela va créer un répertoire qui se
> nomme "~" !?!
>
> nomDossier=~/PointDeRestauration/
>   
Je prends bonne note !
>> clear
>> mkdir -p $nomDossier
>> echo ""
>> echo " 1) Créer un point de restauration. "
>> echo ""
>> echo " 2) Restaurer un point. "
>> echo ""
>> echo " 3) Quitter. "
>> echo ""
>> echo " Taper le numéro de l'action que vous souhaitez ou CTRL-C pour 
>> quitter ce script : "
>> echo ""
>> read touche1
>>    case "$touche1" in
>>    1)
>>      point=$(date +%F)
>>      if dpkg --get-selections > $nomDossier + "/" + $point; then
>>     
> En shell, les chaînes de caractère sont formées sans opérateurs. On peut
> écrire directement:
>
>       if dpkg --get-selections > $nomDossier/$point; then
>   
Je prends bonne note !
>>        echo "Le point de restauration « $point » a est créé avec succès !"
>>      else
>>        echo "La création du point de restauration a échoué !"
>>      fi
>>      ;;
>>   2)
>>     echo "Quel point de restauration souhaitez-vous utiliser ?"
>>     echo
>>     cd $nomDossier
>>     ls
>>     read point
>>     if [ -f $nomDossier + "/" + $point ]; then
>>     
> Même chose:
>
>      if [ -f $nomDossier/$point ]; then
>   
>>       sudo dpkg --clear-selections
>>       if sudo dpkg --set-selections < $nomDossier + "/" + $point; then
>>     
> Même chose encore :
>
>        if sudo dpkg --set-selections < $nomDossier/$point; then
>   
>>         echo "Votre système a été restauré au point « $point » avec 
>> succès !"
>>       else
>>         echo "La restauration a échoué !"
>>       fi
>>     else
>>       echo "Le fichier pour la date de restauration « $point » n'est pas 
>> disponible !"
>>     fi
>>     ;;
>>       3)
>>          break
>>          ;;
>>     
> Il manque le "esac" qui ferme le "case" :
>
>     esac
>   
Je note aussi, pour le « case », c'est « esac » !
>>    done
>>     
> Si il n'y a plus de "while []; do", on n'a plus besoin du done. Aussi,
> l'option 3 n'a plus vraiment de sens si il n'y a plus de boucle.
>   
Je trouve plus élégant de le garder, comme ça toutes les options sont 
dans la liste !

Est-ce que tu as une objection ?
>> J'y ai probablement glissé des erreurs, je fais de mon mieux. Aurais-tu 
>> l'amabilité de le réviser et de me faire te recommandations !
>>     
> Ça a l'air de fonctionner !
>   
>> Pour l'instant, avec la commande « chmod +w PointDeRestauration.sh », 
>> suivi de « ./PointDeRestauration.sh », j'ai le message d'erreur suivant :
>>
>> bash: ./PointDeRestauration.sh: Permission non accordée
>>     
> C'était un piège ;) Non vraiment, je me suis trompé lorsque j'ai réécrit
> la commande. Le "+w" sert vraiment pour ajouter la permission en
> écriture. Le mode correct serait plutôt "+x". Désolé...
>   
Je n'ai pas bien fait mes devoirs, car tu l'avais précisé, « le mode 
"exécutable" (x) » !    ;-(
>> Avec la commande « chmod +w PointDeRestauration.sh », suivi de « sh 
>> ./PointDeRestauration.sh », avec ce nouveau script, comme avec l'ancien, 
>> J'ai toujours le même message d'erreur avec la rencontre des « in » dans 
>> le script :
>>
>>  : bad variable name
>> ./PointDeRestauration.sh: 15: Syntax error: word unexpected (expecting "in")
>>
>> Avec la commande « chmod +w PointDeRestauration.sh », suivi de « bash 
>> ./PointDeRestauration.sh », j'ai le résultat suivant :
>>                               
>>  : commande introuvableh: line 3: clear                                    
>>  1) Créer un point de restauration.
>>
>>  2) Restaurer un point.
>>
>>  3) Quitter.
>>
>>  Taper le numéro de l'action que vous souhaitez ou CTRL-C pour quitter 
>> ce script :
>>
>> 1
>>  » : identifiant non valablene 14: read: « touche1
>>  »PointDeRestauration.sh: line 15: Erreur de syntaxe près du symbole 
>> inattendu « in
>> '/PointDeRestauration.sh: line 15: `   case "$touche1" in
>>     
> Hmmm... je ne sais pas pourquoi. Ça semble marcher pour moi. Est-ce que
> toutes les lignes ont été bien recopiées ? Le script que j'utilise est
> attaché à ce message.
>   
Oui, le problème venait du « w » au lieu du « X » dans la commande « 
chmod ».
>> Pourquoi les résultats sont différents entre l'utilisation de « sh ./... 
>> » et  « bash ./... » ?
>>     
> Sur Ubuntu, "sh" pointe sur /bin/dash, qui différent de bash. Je crois
> que "dash" implémente les fonctionnalités écrites dans des standards,
> tandis que "bash" ajoute plusieurs extensions et fonctionnalités bien au
> delà des standards.
>   
Maintenant que je connais davantage la commande « chmod », je ne devrais 
plus avoir recours au « sh  » ou au « bash » dans la console.

Si je m'inscris à une formation pour le LPIC-1, je veux que tu sois mon 
professeur !    ;-)

Si tu as besoin d'une lettre de référence, je suis disponible, tes 
explications sont simples précises et détaillées  ! Tu es doué pour ce 
domaine !

Un super merci à toi !

L'ami René
-------------- section suivante --------------
Une pièce jointe non texte a été nettoyée...
Nom: PointDeRestauration.sh
Type: application/x-sh
Taille: 1210 octets
Desc: non disponible
Url: https://lists.ubuntu.com/archives/ubuntu-quebec/attachments/20100415/b1f5234e/attachment.sh 


Plus d'informations sur la liste de diffusion Ubuntu-quebec