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

2010-04-15 Par sujet Gilbert Dion
> Ailurus, c'est un peu le cousin d'Ubuntu Tweak.

> J'ai vérifié dans Synaptic et voilà ce que me donne la traduction pour
> Tweak avec Google :
>

Tweak n'est pas Ubuntu Tweak. Va voir ici:

http://doc.ubuntu-fr.org/ubuntu_tweak

Je n'installe jamais une nouvelle machine Ubuntu sans y installer tout de
suite après Ubuntu Tweak, qui me permet ensuite de peaufiner le système,
d'installer un certain nombre de logiciels importants ou intéressants et
leurs dépôts: Opera, Wine, Cairo Dock, Google Earth, Skype, etc.; de faire
le ménage des paquets, des noyaux, de paramétrer et de configurer Gnome,
Compiz, le gestionnaire de fenêtres (remettre les boutons des fenêtres à
droite pour ceux qui détestent leur nouvelle position à gauche dans Lynx),
etc.

Es-tu partant pour rédiger une sous-section « Alternatives de logiciel
> en mode graphique » dans une ou des sections du Wiki !
>

J'ai actuellement et malheureusement trop de préoccupations d'ordre
existentiel et personnel pour me lancer là-dedans. Ça me servirait de
diversion, plutôt que de m'occuper de mes affaires.

>
Gilbert
-- 
Ubuntu-quebec mailing list
Ubuntu-quebec@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-quebec


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

2010-04-15 Par sujet Gilbert Dion
Bonjour,

Mon erreur: j'avais malencontreusement écrit AIlurus au lieu d'Ailurus.
J'avais mis le i, deuxième lettre du nom, en majuscule. Ailurus s'est déjà
appelé Ubun-Student. C'est un peu le cousin d'Ubuntu Tweak.

Autre erreur: il est dans MES dépôts (et non pas dans *les* dépôts). je ne
me souvenais pas l'avoir installé via launchpad:

https://launchpad.net/~ailurus/+archive/ppa

Comme mon système est en français, Ailurus est en français.

Ailurus, c'est un peu le cousin d'Ubuntu Tweak.


Gilbert Dion
-- 
Ubuntu-quebec mailing list
Ubuntu-quebec@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-quebec


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

2010-04-15 Par sujet Philippe Gauthier
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.

> Est-ce que le « done » fait partie de la boucle du « case » ?

Le "done" était la contrepartie de "while []; do".

> Je ne sais pas ce qu'est « pratique pour le LPIC-1 », mais continus a 
> pratiqué, j'admire tes résultats !

C'est le Linux Professional Institute Certification, une certification
pour le niveau d'administrateur junior pour des systèmes Linux.

> 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/

> 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

>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

>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.

> 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é...

> 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.

> 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

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

2010-04-15 Par sujet Michel Leduc

Lami René a écrit :

Gilbert Dion a écrit :
  
Dans l'utilitaire AIlurus (il est dans les dépôts), il y a une option 
qui fait exactement cela. Dans le menu Recover APT permet de 
sauvegarder un instantané de l'état actuel du système avant 
d'installer des logiciels. On peut ensuite revenir à cet état en cas 
de pépin ou si on change d'idée. Je ne sais pas à quel point c'est 
fonctionnel, car je n'en ai pas encore fait l'essai. Mais je voulais 
le mentionner.


AIlurus regorge par ailleurs de tweaks tous aussi intéressants les uns 
que les autres.


Gilbert


Bonjour Gilbert,

Je ne trouve pas de paquet « AIlurus », pourrais-tu me donner le dépôt 
auquel il appartient avec la commande suivante :


  apt-cache policy AIlurus

Simplement me recopier ici le résultat de la commande.

Merci !

L'ami René
  




Voici où j'ai pu trouver  Ailurus:  http://code.google.com/p/ailurus/
  

Voir aussi: http://www.clapico.com/2009/12/30/ailurus/
Le logiciel me semble très intéressant

Michel


-- 
Ubuntu-quebec mailing list
Ubuntu-quebec@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-quebec


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

2010-04-13 Par sujet Philippe Gauthier
Bonjour René!

Je viens de jeter un coup d'oeil sur la page:
> http://doc.ubuntu-fr.org/points_de_restauration_pour_un_systeme_linux#script

Il y a un détail qui m'accroche... c'est la commande pour rendre le
script "exécutable". Je me permets une petite digression :) La page
dit :

  sudo chmod -R +rwx PointDeRestauration.sh

Ceci n'est pas trop efficace. D'abord, la commande sudo ne serait
nécessaire que si le fichier PointDeRestauration.sh ne pouvait être
altéré que par le super-utilisateur (root). C'est le cas de la plupart
des fichiers installés sur le système, mais puisqu'on vient de créer ce
fichier à la main, on dispose certainement des permissions pour le
modifier. Bye bye sudo. Ce qui nous amène à :

  chmod -R +rwx PointDeRestauration.sh

Mais qu'est-ce que ces chmod, R, rwx et autres codes secrets? :) "chmod"
sert à modifier certaines informations à propos d'un fichier ou d'un
répertoire -- les droits d'accès, et certaines fonctionnalités comme
"exécutable". "-R" modifie la commande pour la rendre récursive.
Autrement dit, si on l'applique sur un répertoire, la commande modifie
le répertoire lui-même puis poursuit sur sa lancée en modifiant tous les
fichiers et sous-répertoires inclus. Finalement, "+rwx" sont les codes
correspondant aux informations à modifier. Dans le cas présent, on
ajoute (+), les permissions de lecture (r), d'écriture (w), puis le mode
"exécutable" (x). Ici, l'ajout du droit à la lecture et à l'écriture
(pour tous les utilisateurs) ne nous intéresse pas vraiment.

Puisqu'on ne veut modifier qu'un seul fichier, on vire le "-R". Comme ça
on risque moins de faire des dégâts qui se propagent (ce qui peut être
particulièrement grave si on a utilisé "sudo"!) En final (ouf!) :

  chmod +w PointDeRestauration.sh


Pour ce qui est du script, ça fonctionne bien ! Je pense l'utiliser sur
un serveur...



Des détails, des détails... :)

Ligne 5, pour déterminer si le répertoire existe, je préfère toujours le
demander explicitement à bash (voir "man test" pour les détails) plutôt
que de tenter de provoquer un code d'erreur :

  if [ -d ~/PointDeRestauration ]

Un autre façon de faire serait de carrément éliminer la vérification et
demander à mkdir de s'en charger :

  mkdir -p ~/PointDeRestauration

Le nom 2010-04-12, c'est plus facile à saisir pour mon vieux neurone que
100412. On peut ajouter la vérification de la commande dpkg pour des
points bonis :

  1)
point=$(date +%F)
if dpkg --get-selections > ~/PointDeRestauration/$point; then
  echo "Le point de restauration « $point » a est créé."
else
  echo "La création du point de restauration a échoué."
fi
;;

Entre les lignes 28 et 29, j'ajouterais une vérification que
l'utilisateur a tapé le nom d'un point de vérification correctement (et
donner de l'aide sinon). J'ai tapé le chemin complet d'un point de
restauration (puisque c'est cela que le script m'a donné comme info et
qu'autrement je ne sais pas lire les instructions) et j'ai reçu une
erreur pas jolie comme quoi le fichier n'existait pas. Ci-dessous, le
"cd" nous permet de lister que le nom des points de restauration plutôt
que d'obtenir le leur chemin complet.

  2)
echo "Quel point de restauration souhaitez-vous utiliser ?"
echo
cd ~/PointDeRestauration; ls
read point
if [ -f ~/PointDeRestauration/$point ]; then
  sudo dpkg --clear-selections
  if sudo dpkg --set-selections < ~/PointDeRestauration/$point; then
echo "Votre système a été restauré au point « $point »."
  else
echo "La restauration a échoué."
  fi
else
  echo "La date de restauration « $point » n'est pas disponible."
fi
;;


Pour d'autres points bonis :) On remarque que "~/PointDeRestauration/"
est recopié 5 ou 6 fois dans le script. On pourrait ajouter une variable
en tête du script qui contiendrait le nom du répertoire, puis utiliser
cette variable dans le code. Si on décide de changer l'endroit où sont
enregistrés les points (je pense à quelque chose comme /var/...), ce
serait vraiment plus facile à faire.



(Est-ce que ça parait trop que je pratique pour le LPIC-1 ? :)

-- 
Philippe Gauthier 
http://www.deuxpi.ca/



-- 
Ubuntu-quebec mailing list
Ubuntu-quebec@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-quebec


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

2010-04-13 Par sujet Gilbert Dion
Dans l'utilitaire AIlurus (il est dans les dépôts), il y a une option qui
fait exactement cela. Dans le menu Recover APT permet de sauvegarder un
instantané de l'état actuel du système avant d'installer des logiciels. On
peut ensuite revenir à cet état en cas de pépin ou si on change d'idée. Je
ne sais pas à quel point c'est fonctionnel, car je n'en ai pas encore fait
l'essai. Mais je voulais le mentionner.

AIlurus regorge par ailleurs de tweaks tous aussi intéressants les uns que
les autres.

Gilbert
-- 
Ubuntu-quebec mailing list
Ubuntu-quebec@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-quebec


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

2010-04-04 Par sujet Gilbert Dion
>
> Aussi, je voulais porter à ton attention un programme bien intéressant
> pour ce genre de travail: AptOnCD (paquet 'aptoncd') qui permet de
> faire un cédérom ou DVD avec l'ensemble des paquets installer (et
> ensuite pouvoir faire une restauration). Je me souviens avoir vu un
> programme graphique semblable mais qui ne créait qu'un fichier tout
> simple (.deb ou .list...) sur lequel on pouvait double-cliquer pour
> faire le même travail qu'avec dpkg --(get|set)-selections, mais son
> nom m'échappe.
>
À l'adresse suivante, en plus de la méthode avec dpkg, on détaille une façon
de sauvegarder son installation dans un fichier .deb, mais ce n'est pas avec
une interface graphique:
http://www.webupd8.org/2010/03/2-ways-of-reinstalling-all-of-your.html

Gilbert
-- 
Ubuntu-quebec mailing list
Ubuntu-quebec@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-quebec


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

2010-04-02 Par sujet Philippe Gauthier
Bonjour René,

>  case "$touche1" in
> 1

À première vue, la syntaxe de "case" est incorrecte. Le "pattern" doit
être suivi d'une parenthèse fermante. Cela donnerait:

  case "$touche1" in
  1)


Directement de "man bash":

case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac

ou la même chose, de "man dash":

case word in
pattern) list ;;
...
esac


-- 
Philippe Gauthier 
http://www.deuxpi.ca/



-- 
Ubuntu-quebec mailing list
Ubuntu-quebec@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-quebec


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

2010-04-02 Par sujet Gregory Eric Sanderson
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é 

> 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 :
>
> r...@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 :
>
> r...@dv9700:~/sda6$ sh ./pr.sh
> : not found clear
> ./pr.sh: 13: Syntax error: word unexpected (expecting "in")
> r...@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
>  el