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 :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 ?mkdir -p ~/PointDeRestaurationExactement. 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; thenEn 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 ]; thenMême chose: if [ -f $nomDossier/$point ]; thensudo dpkg --clear-selections if sudo dpkg --set-selections < $nomDossier + "/" + $point; thenMême chose encore : if sudo dpkg --set-selections < $nomDossier/$point; thenecho "Votre système a été restauré au point « $point » avec succès !"else echo "La restauration a échoué !" fi elseecho "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 » !
Je trouve plus élégant de le garder, comme ça toutes les options sont dans la liste !doneSi 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.
Est-ce que tu as une objection ?
Je n'ai pas bien fait mes devoirs, car tu l'avais précisé, « le mode "exécutable" (x) » ! ;-(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éeC'é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é...
Oui, le problème venait du « w » au lieu du « X » dans la commande « chmod ».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" inHmmm... 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.
Maintenant que je connais davantage la commande « chmod », je ne devrais plus avoir recours au « sh » ou au « bash » dans la console.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.
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é
PointDeRestauration.sh
Description: Bourne shell script
-- Ubuntu-quebec mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-quebec
