[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