#1 Le 27/04/2008, à 02:21
- geekubuntu
Aide pour script bash
Holé
Je voudrais proposer un simple script bash d'installations de deux logiciels (depuis les dépots officiels) et je voudrais y insérer une demande de validation pour chacun d'eux (par exemple si on en veut qu'un).
Donc pour l'instant j'ai ça:
#!/bin/sh
sudo aptitude install soft1 soft2
#end of file
- je voudrais afficher une demande préalable si on veut installer "soft1" , puis "soft2" en répondant par "y" ou "n" (installation "un par un")
- es-ce "correct" d'utiliser aptitude et apt-get dans un même script? par exemple il y a des softs qui avec aptitude prennent trop de dépendances.
- que la fenêtre ne se ferme pas à la fin du script
merki d'avance ^^
++
Trouve ton GULL!! --> http://www.trouvetongull.info/
Hors ligne
#2 Le 27/04/2008, à 02:54
- herberts
Re : Aide pour script bash
Déjà, pour la question 2 : NON. aptitude et apt-get ne fonctionnant pas tout à fait pareil, il ne faut pas les alterner, il faut en choisir un et s'y tenir. Il y a de nombreux débats là dessus, aptitude est censé mieux gérer les dépendances, perso j'utilise apt-get qui marche quand même très bien.
Sinon, pour ton script, je te proposerai une architecture du genre : "pour installer soft1, tapez 1, pour installer soft2 tapez 2, pour installer les 2 tapez 3 et pour quitter tapez n'importe quelle autre touche." Ensuite tu stocke la réponse dans une variable, et tu compare la valeur et exécute ce qui ai demandé.
En tout cas, pour que la fenêtre ne se ferme pas, fini par "read" sur la dernière ligne (de mémoire)
Dernière modification par herberts (Le 27/04/2008, à 02:55)
Hors ligne
#3 Le 27/04/2008, à 03:10
- Fake
Re : Aide pour script bash
Il semble que tu veuille faire un script qui s'affiche dans un terminal.
- Pour la question :
Il va fallloir afficher la question, lire la réponse, puis filtrer la réponse pour les différentes actions, selon le choix.
Pour afficher du texte on utilise la commande "echo"
Pour lire des variables je pense que "read" te conviendra :
Pour filtrer on utilise "if" ou "case" (ici il n'y aura que deux cas en gros, max trois si tu prend en compte l'erreur de frappe)
Voire les différentes pages man ou http://lea-linux.org/cached/index/Dev-shell_script.html#
- Pour garder la fenêtre
Si tu lance le script a partir d'une commande le terminal restera ouvert et est déjà ouvert avant l'execution du script.
Si tu lance le script en cliquant ou d'un lanceur, il faudra que le script ouvre lui même un terminal (il faut chercher du coté de "gnome-terminal" je crois mais pas sur)
Sinon un "sleep" le gardera ouvert pendant un certain temps
Sinon un read sans argument attend que l'on tape 'enter'
Sinon il y a surement un autre moyen.
Si jamais tu pense lancer le script a partir d'un lanceur et non pas d'une ligne de commande, tu pourais regarder du copté de zenity pour afficher tes messages dans des boites de dialogues et non un terminal.
Dernière modification par Fake (Le 27/04/2008, à 03:11)
Hors ligne
#4 Le 27/04/2008, à 03:42
- herberts
Re : Aide pour script bash
Si tu es débutant en script bash, je pense que zénity c'est un peu chaud, car ça sous entendrai de metre en place des boutons cliquables pour les choix.
Ensuite, on peu te donner plein de conseil, mais le mieux je pense est que tu cherches quelques tutos sur le bash, c'est comme ça que tu apprendra le mieux. Parce que dans l'absolu, on pourrait te le faire ton script, mais tu n'aurai pas appris grand chose.
Quelques adresses :
http://abs.traduc.org/abs-4.2.01-fr/index.html très complet
http://ftp.traduc.org/doc-vf/gazette-li … 111-D.html les bases
http://ftp.traduc.org/doc-vf/gazette-li … 112-F.html la suite
http://www.ac-creteil.fr/reseaux/system … ation.html
http://www.trustonme.net/didactels/148.html
Celui sur léa-linux donné par Fake est très bien aussi, complet et abordable
Dernière modification par herberts (Le 27/04/2008, à 03:43)
Hors ligne
#5 Le 27/04/2008, à 05:20
- geekubuntu
Re : Aide pour script bash
Merci à vous pour tous ces liens et conseils En effet je pensais à Zenity, mais pour l'instant je vais faire un simple . sh
Il s'agit d'un programme pour rajouter certaines choses à Ubuntu après une install fraiche (dépots, softs et docs) et sera distribué au sein de mon GULL
Par contre je bute sur un truc là, je m'essaye aux demandes de choix:
echo "Voulez-vous exécuter ce script? (o/n)"
read reponse
if [[ "$reponse" == "o" ]]
then
sudo apt-get install soft1
fi
ça me ferme le terminal quelque soit la réponse tapée
++
Dernière modification par geekubuntu (Le 27/04/2008, à 05:23)
Trouve ton GULL!! --> http://www.trouvetongull.info/
Hors ligne
#6 Le 27/04/2008, à 11:25
- Fake
Re : Aide pour script bash
sudo apt-get install $soft1
En tout cas tu as besoin d'un $ ici, le paquet soft1 n'existe pas.
Chez moi il demande le mot de passe quand même.
J'ai pensé a zenity parceque je pensais que tu poserai une question par soft.
Du coup tu pouvais faire une boite installer truc2 ? oui non, puis une autre truc 2 oui non... tu garde tout les choix en mémoire et ensuite tu installes (comme ca on est pas obligé de poireauter pour la question suivante :-)
Dernière modification par Fake (Le 27/04/2008, à 11:26)
Hors ligne
#7 Le 27/04/2008, à 11:29
- herberts
Re : Aide pour script bash
Déjà, je te conseillerai d'utiliser #!/bin/bash, plutôt que #!/bin/sh, surtout si tu prévois de passer ton script à d'autres gens, car sh ne pointera pas forcément toujours vers bash, du coup ton script pourrait ne pas marcher chez tout le monde.
Et avec ceci ça marche chez moi :
#!/bin/bash
echo "Voulez-vous exécuter ce script ? (o/n)"
read reponse
if echo "$reponse" | grep -q "o"
then
echo "Ok, alors j'installe soft1"
sudo apt-get install soft1
else
echo "Au revoir"
fi
Hors ligne
#8 Le 27/04/2008, à 11:45
- Fake
Re : Aide pour script bash
Même avec ce que te donne herberts, si tu veux lancer le script par clic et que tu ne rajoute pas de pause à la fin, la fenêtre va se fermer et tu n'aura le temps de rien voir...
Teste donc ton script a partir d'une console déja ouverte, ca sera plus simple pour toi
Hors ligne
#9 Le 27/04/2008, à 11:47
- herberts
Re : Aide pour script bash
oui, c'est pas faux. ou rajoute read sans argument à la fin, la fenêtre restera ouverte jusqu'à ce que tu tape sur entrée
Hors ligne
#10 Le 27/04/2008, à 13:05
- Fake
Re : Aide pour script bash
Je crois que j'aurai fait un truc comme ça. Cela permet de modifier très facilement le script pour changer le programme a installer.
#!/bin/bash
soft1=nom_du_paquet
echo "Voulez-vous exécuter ce script ? (o/n)"
read reponse
if echo "$reponse" | grep -q "o"
then
echo "Ok, alors j'installe $soft1"
sudo apt-get install $soft1
else
echo "Au revoir"
fi
read
Hors ligne
#11 Le 27/04/2008, à 14:02
- herberts
Re : Aide pour script bash
Tout à fait d'accord. Après, mais ça c'est chacun comme il veut, j'ai tendance à mettre les constantes définies au départ en majuscule (SOFT1=....)
Hors ligne
#12 Le 27/04/2008, à 15:46
- geekubuntu
Re : Aide pour script bash
thanks
pour finir, afin de pas mettre des "sudo" partout, comment passer "root" dans le script.
il y a bien la solution de faire "sudo script.sh" , mais je souhaite qu'il soit éxécuter via un double-clic en le rendant simplement exécutable.
++
Trouve ton GULL!! --> http://www.trouvetongull.info/
Hors ligne
#13 Le 27/04/2008, à 16:04
- yurek
Re : Aide pour script bash
#!/bin/bash
paquet=`zenity --entry --title="Paquet a installé" --text="Entrer le nom du paquet que vous voulez installer" --entry-text="nom du paquet"`
sudo apt-get install $paquet
dpkg -l $paquet
if [ "$PIPESTATUS" = "0" ]; then
zenity --info --title="Etat de l'installation" --text="L'installation s'est bien passé"
else
zenity --error --title="Etat de l'installation" --text="Une erreur s'est produit à l'installation"
fi
Dernière modification par yurek (Le 27/04/2008, à 16:04)
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#14 Le 27/04/2008, à 16:38
- geekubuntu
Re : Aide pour script bash
#!/bin/bash
paquet=`zenity --entry --title="Paquet a installé" --text="Entrer le nom du paquet que vous voulez installer" --entry-text="nom du paquet"`
sudo apt-get install $paquet
dpkg -l $paquet
if [ "$PIPESTATUS" = "0" ]; then
zenity --info --title="Etat de l'installation" --text="L'installation s'est bien passé"
else
zenity --error --title="Etat de l'installation" --text="Une erreur s'est produit à l'installation"
fi
ben dans mon cas c'est pour proposer l'installation d'une sélection de softs déjà établis par nos soins
Trouve ton GULL!! --> http://www.trouvetongull.info/
Hors ligne
#15 Le 27/04/2008, à 17:03
- Fake
Re : Aide pour script bash
La commande su permet de changer d'utilisateur.
Pour passer en root on utilise
sudo su
ou
gksudo su
Il demande le mot de passe et le terminal devient un terminal root.
Hors ligne
#16 Le 27/04/2008, à 17:17
- geekubuntu
Re : Aide pour script bash
Si je mets:
sudo su ;
dans une fonction, cela demande bien le mdp dans le terminal, mais le script s'arrête
(...)
Bonne optimisation!
[sudo] password for fred:
root@fred-laptop:/home/fred/Bureau#
et donc là ben le script est stoppé...
Trouve ton GULL!! --> http://www.trouvetongull.info/
Hors ligne
#17 Le 27/04/2008, à 18:17
- yurek
Re : Aide pour script bash
#!/bin/bash
function annuler {
if [ "${PIPESTATUS[0]}" != "0" ]; then
exit;
fi
}
PAQUET=$(zenity --list --checklist --width=300 --height=200 \
--column "Selection" --column "A/B" --column "Choix" --separator=" " \
--title="Installation de paquets" \
--text="Choisissez le(s) paquet(s) à installé" \
--hide-column="2" \
TRUE "nom_du_paquet_1" "Paquet 1" \
FALSE "nom_du_paquet_2" "Paquet 2" )
annuler
PAQUET=`zenity --entry --title="Paquet a installé" --text="Entrer/confirmer le(s) nom(s) du(des) paquet(s) que vous voulez installer" --entry-text="$PAQUET"`
annuler
if [ "$PAQUET" = "" ];then
sudo apt-get install $PAQUET | zenity --progress \
--percentage=0 \
--title="Installation" \
--text="Installation des paquets" \
--auto-close;
sudo dpkg -l $PAQUET | zenity --progress \
--percentage=0 \
--title="Vérification" \
--text="Vérification de l'installation des paquets" \
--auto-close;
if [ "$PIPESTATUS" = "0" ]; then
zenity --info --title="Etat de l'installation" --text="L'installation s'est bien passé"
else
zenity --error --title="Etat de l'installation" --text="Une erreur s'est produit à l'installation"
fi
else
zenity --error --title="Etat de l'installation" --text="Aucun paquet a installé !"
fi
"nos" ? vous etes une entreprise ?
Dernière modification par yurek (Le 27/04/2008, à 18:22)
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#18 Le 27/04/2008, à 19:50
- herberts
Re : Aide pour script bash
Il s'agit d'un programme pour rajouter certaines choses à Ubuntu après une install fraiche (dépots, softs et docs) et sera distribué au sein de mon GULL
Hors ligne
#19 Le 28/04/2008, à 14:17
- geekubuntu
Re : Aide pour script bash
reuh
voici notre création en version 0.5.1 : http://pastebin.com/m53d3c3f8
le script fait:
- ajouts de documentations via framabook
- nouveaux dépôts
- nouveaux logiciels pour une utilisation plus compléte (choix discutables mais c'est dans l'optique de fournir quelque chose de plus complet aux nouveaux utilisateurs - venant de windows principalement)
avez-vous des remarques sur le code? l'interface graphique sera pour plus tard
++
Trouve ton GULL!! --> http://www.trouvetongull.info/
Hors ligne
#20 Le 28/04/2008, à 14:29
- yurek
Re : Aide pour script bash
Pourquoi avoir demander de l'aide si tu savais le faire ?
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#21 Le 28/04/2008, à 15:09
- herberts
Re : Aide pour script bash
le code à l'air correct, par contre, au niveau du choix des logiciels, c'est très orienté kde (je pense notamment à amarok, il a beau être très bien, ça fait ch**r d'installer les bibliothèque QT juste pour ça), il pourrait être bon, soit de détecter la variante utilisé, un peu sur le principe de la détection de la version d'ubuntu (ubuntu, kubuntu, xubuntu..), soit juste de demander à l'utilisateur laquelle il utilise en stockant la réponse dans une variable. Ensuite, faire une liste de programme différente selon la variante.
Dernière modification par herberts (Le 28/04/2008, à 15:11)
Hors ligne
#22 Le 28/04/2008, à 21:30
- yurek
Re : Aide pour script bash
Est t il franchement necessaire de demander a l'utilisateur quel version d'ubuntu est utiliser, il suffit de le récupéré avec une simple commande, de meme pour la version !
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#23 Le 28/04/2008, à 22:35
- herberts
Re : Aide pour script bash
il ne me semble pas que le script demande à l'utilisateur sa version, mais je peux me tromper
Hors ligne
#24 Le 28/04/2008, à 23:03
- Fake
Re : Aide pour script bash
J'ai l'impression qu'il voulais juste la méthode du read il ne lui manquait que ça
Sinon le code a l'air bien, la coloration est vraiment merdique ca passerait inaperçu sur un skyblog
Sinon, l'interface graphique ben tout est dans ce que t'a donné Yurek !
Les principales fenêtres Zenity dont tu aurais besoin et leur syntaxe.
J'aurai personnelement donné le choix a l'utilisateur pendant l'exécution du script. Peut être avec un echo list_soft dans un fichier et des cat pour poser la question a chaque fois, puis on reconstruit un autre list_soft...
Bon ca fait beaucoup de questions apres mais on est a l'installation et autant je trouve qu'il manque des choses a l'install par défaut autant j'ai pas envie d'installer toute la liste !!! apres les gouts et les couleurs...
Bon on peut aussi éditer le script avant de le lançer, ca fait un bon entrainement pour le newbee ...
Hors ligne
#25 Le 28/04/2008, à 23:07
- herberts
Re : Aide pour script bash
ou alors que le script aille lire la liste des softs dans un fichier à part, lequel sera édité, histoire qu'il n'y ai pas d'effacement malencontreux d'un morceau du script, ou tout simplement dans un souci de clarté pour les newbee justement
Hors ligne