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

Gregory Eric Sanderson gzou2000 at gmail.com
Ven 2 Avr 21:49:38 BST 2010


Bonjour rené (ou l'ami :-)

le script marche correctement si on fait un copier-coller de ce qu'il y a
dans la page
http://doc.ubuntu-fr.org/points_de_restauration_pour_un_systeme_linux#scriptmais
pas si on copie la version dans votre courriel précédent. Je suppose
donc que le script a été corrigé depuis.

Il y a 2 raisons pourquoi le script version courriel ne marchait pas :
Premièrement, à la ligne 11, pour séparer une string sur plusieurs ligne il
faut mettre un backslash ( \ ) à la fin de la ligne, sinon bash interprète
les lignes comme 2 commandes différentes. Donc, soit on met la string sur
une seul ligne, ou on la sépare de même :

        echo " Taper le numéro de l'action que vous souhaitez ou CTRL-C \
pour quitter ce script : "

La même chose s'applique à la ligne 26.

Deuxièmement, dans le switch case de la ligne 14 à 34, il faut mettre un ")"
après chaque switch.

case "touche1" in
    *1)*
        #mettre code ici
        ;;
    *2)*
        #mettre code ici
        ;;
esac

Après ces corrections, le script marche.

Maintenant, bien que le script (version corrigé) accomplit *correctement* sa
fonction, personellement j'ai des tracas à propos du style d'implimentation
du code :

le script peut vérifier si le dossier existe avec la condition "if [ ! -d
~/PointDeRestauration ]",  ça évite d'afficher à l'écran une erreur qui
pourrait mêler l'utilisateur quand le dossier n'existe pas.

Un point de restauration, (que ça soit question d'en créer ou en restaurer)
c'est une action singulière, dans le sens que c'est une action qu'on va
accomplir sur une base occasionnelle et qui ne nécessite pas plusieurs
interventions utilisateur (du moins, dans ce cas ci). Alors, on ne devrait
pas avoir besoin de mettre une boucle qui vient demander à nouveau quoi
faire une fois que l'action est terminé. La boucle force l'utilisateur à
faire une 2e intervention pour terminer une action qui devrait juste en
nécéssiter une. Non seulement ça, mais c'est une boucle infini et le seul
moyen d'en sortir c'est de forcer le script de s'arrêter avec CTRL-C. cette
manière de coder me fait penser vaguement à l'ère BASIC avec ses BREAK et
ses GOTO. Il existe d'autres alternatives plus "propre" pour accomplir le
même résultat.

Autre commentaire : pour ce genre de script ça serait intéressant
d'automatiser le processus sans avoir besoin d'aucune intervention humaine.
Une manière possible serait de modifier le script pour prendre en compte des
arguments (une recherche google sur "getopts" t'en dira plus). Comme ça, on
peut configurer le système pour éxécuter le script sur une base régulière.
(par exemple : à tous les premier lundi du mois)

Sinon, il serait aussi intéressant d'ajouter un message d'avertissement
indiquant à l'utilisateur que restaurer un point de restauration peut avoir
des répercussions importantes, puisque le système s'apprête à
installer/désintaller une multitude de paquets.

Voilà mes commentaires, à prendre avec un grain de sel.

2010/4/2 Lami René <lami at webestrie.com>

> Bonjour,
>
> J'ai produit le tutoriel «
> http://doc.ubuntu-fr.org/points_de_restauration_pour_un_systeme_linux »
> et une personne à ajouté une section Script «
>
> http://doc.ubuntu-fr.org/points_de_restauration_pour_un_systeme_linux#script
> », ce que j'apprécie grandement.
>
> Je ne connais pas la programmation de script et il y a un petit bogue
> dans le script, alors pourriez-vous m'aider ?
>
> Avec bash, le message d'erreur est le suivant :
>
> rene at DV9700:~/sda6$ bash ./pr.sh
>  : commande introuvable
>  »pr.sh: line 13: Erreur de syntaxe près du symbole inattendu « in
> '/pr.sh: line 13: `         case "$touche1" in
>
> Avec sh, le message d'erreur est le suivant :
>
> rene at DV9700:~/sda6$ sh ./pr.sh
> : not found clear
> ./pr.sh: 13: Syntax error: word unexpected (expecting "in")
> rene at DV9700:~/sda6$
>
> Le script est le suivant :
>
> #!/bin/bash
> clear
> while [ 1 -eq 1 ]
>   do
>   if ls ~/PointDeRestauration
>      then
>         echo " 1) Créer un point de restauration "
>
>         echo " 2) Restaurer un point "
>
>         echo " Taper le numéro de l'action que vous souhaitez ou CTRL-C
> pour quitter ce script : "
>         read touche1
>         case "$touche1" in
>            1
>               jour=$(date +%d)
>               mois=$(date +%m)
>               annee=$(date +%y)
>               dpkg --get-selections >
> ~/PointDeRestauration/$annee$mois$jour
>               echo " Point de restauration "+
> ~/PointDeRestauration/$annee$mois$jour +" est créé avec succès !"
>               ;;
>            2
>               ls ~/PointDeRestauration/*
>               echo " Quelle est la date de point de restauration
> souhaitez-vous utiliser ? (AAMMJJ)"
>               read touche2
>               sudo dpkg --clear-selections
>               sudo dpkg --set-selections < ~/PointDeRestauration/$touche2
>               sudo apt-get dselect-upgrade
>               echo " Votre système a été restauré avec succès !"
>               ;;
>         esac
>      else
>         mkdir ~/PointDeRestauration
>      fi
> done
>
> Je crois comprendre qu'il y a un problème avec la variable « touche1 »
> et le paramètre « in » de la commande « case » !
>
> Merci d'avance pour tout aide !
>
> L'ami René
> P.-S. Je suis programmeur analyste.
>
> --
> Ubuntu-quebec mailing list
> Ubuntu-quebec at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/ubuntu-quebec
>



-- 
"All musicians are drug addicts, no question about it. The ecstasy we get
during a concert is proof enough.
yet there is a slight difference between us, the musicians, and the typical
'street-junkie'...
Instead of consuming powder, we consume vibrations"

Will
et/ou
Gregory Eric Sanderson Turcot Temlett MacDonnell Forbes
et/ou
Touffa!  :)
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: https://lists.ubuntu.com/archives/ubuntu-quebec/attachments/20100402/a6ea34d1/attachment-0001.htm 


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