Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/05/2009, à 23:45

Phi

[Résolu] Script d'installation des paquets préférés

Bonjour tout le monde !

Je fais mes premières armes en Bash en travaillant en parallèle sur plusieurs petits scripts sans prétention. Évidemment, j'ai quelques soucis avec l'un d'entre eux.

Son but est de demander à l'utilisateur s'il veut utiliser tel ou tel paquet de sorte à générer une liste que je colle après un bon apt-get install $ma_liste ! Je rajoute un petit espace entre chaque paquet via une fonction qui va bien seulement, un test quelconque me donne ce résultat :

E: Impossible de trouver le paquet paquet1 paquet2 paquet3

Alors je poste ici mon code en espérant que quelqu'un verra une erreur qui m'échappe totalement ! Notez qu'il s'agit d'une version en cours de développement donc excusez les incohérences / erreurs / raccourcis de programmation / etc. mais compte tenu de tout cela, je serais ravi d'obtenir (en plus d'un peu d'aide vis-à-vis de ma question) des suggestions ou conseils !

Bien à vous, et merci par avance pour toute aide !

#!/bin/bash

# Ajout d'un paquet a la commande apt-get install pour tout installer en une fois
function ajoute_paquet
{
	paquet=$1
	echo "Voulez-vous installer le paquet $paquet ? (o/n)"
	read reponse_ajout_paquet
	
	if [ $reponse_ajout_paquet == 'o' ]; then
		if [ "$liste_paquets" == "" ]; then
			# Premier paquet, pas d'espace
			liste_paquets="$paquet"
		else
			# Un espace avant d'ajouter le nouveau paquet
			liste_paquets="$liste_paquets $paquet"
		fi
	fi
		
	return 0
}

# Le programme doit etre lance en root
if [ $(id -u) == 0 ]; then
	# L'utilisateur est un super-utilisateur
	
	# Mises a jour de la liste des paquets
	apt-get update
	
	# Questionne l'utilisateur pour l'ajout de certains paquets
	# TODO: faire un foreach depuis une enumeration
	ajoute_paquet "rar"
	ajoute_paquet "gnome-do"
	ajoute_paquet "vlc"
	ajoute_paquet "gmountiso"
	ajoute_paquet "filezilla"
	ajoute_paquet "grisbi"
	ajoute_paquet "dvdrip mplayer"
	ajoute_paquet "nautilus-open-terminal"
	ajoute_paquet "virtualbox-ose"
	ajoute_paquet "wine"
	ajoute_paquet "gstreamer0.10-ffmpeg gstreamer0.10-plugins-ugly"	
	apt-get --assume-yes install "$liste_paquets"
			
	# Installation de libdvdcss
	#/usr/share/doc/libdvdread4/install-css.sh
	
	# Installation de Metamorphose
	#dpkg -i ./install_fichiers/metamorphose_2.0.6.0-1_all.deb
	#apt-get --assume-yes -f install
	
	# Mise a jour de tout le systeme
	#apt-get upgrade
	
	# Deplacement du wallpaper
	#cp -r ./install_fichiers/chameleon /usr/share/backgrounds/
else
	# L'utilisateur n'est pas un super-utilisateur
	echo "install: Nécessite d'être super-utilisateur (root)";
fi

exit 0

Dernière modification par Phi (Le 10/05/2009, à 17:29)

Hors ligne

#2 Le 03/05/2009, à 00:05

loopx

Re : [Résolu] Script d'installation des paquets préférés

Je te conseil d'utiliser "set -x" pour débugger ton script wink



Tu ajoute "set -x" dans le main ou dans une des fonctions et toute valeur passée à une variable etc est affichée dans la console wink



EDIT:

if [ $reponse_ajout_paquet == 'o' ]; then
        if [ "$liste_paquets" == "" ]; then
            # Premier paquet, pas d'espace
            liste_paquets="$paquet"
        else
            # Un espace avant d'ajouter le nouveau paquet
            liste_paquets="$liste_paquets $paquet"
        fi
    fi

Je pense que tu peux t'en foutre de vérifier si la liste est vide ..  vire moi le if/else imbriqué dans le if ..   et utilise simplement :

liste_paquets=$liste_paquet $paquet


et pas besoin de "  partout wink


EDIT2: je sais pas si ca peut poser problème, mais le paramètre "liste_paquets" n'est jamais utilisé AU DEBUT dans le main, mais plutot dans la fonction directement. Quand tu passe du main à une fonction, cette dernière n'a pas accès au paramètre de main ... mais normalement, main devrais pouvoir accéder aux paramètres des fonctions ... règle d'imbrication yikes

Dernière modification par loopx (Le 03/05/2009, à 00:14)


CentOS => tout type de serveur
Ubuntu => tout bon ordinateur
Lubuntu => sur du vieux matos ;-)
Wiki perso : http://pix.noip.me

Hors ligne

#3 Le 03/05/2009, à 00:16

loopx

Re : [Résolu] Script d'installation des paquets préférés

Trouvé smile


J'ai pas testé, mais en fait, il le trouve pas un paquet du nom "paquet1 paquet2 paquet3" car tu utilise " et " a GAUCHE et à DROITE du premier et dernier paquet wink


apt-get --assume-yes install "$liste_paquets"

en

apt-get --assume-yes install $liste_paquets


pas mettre de " partout wink


CentOS => tout type de serveur
Ubuntu => tout bon ordinateur
Lubuntu => sur du vieux matos ;-)
Wiki perso : http://pix.noip.me

Hors ligne

#4 Le 03/05/2009, à 10:24

Phi

Re : [Résolu] Script d'installation des paquets préférés

Tu es un chef smile C'était bien ça ! Alors effectivement, les guillemets semblent parfois inutiles. Débutant, j'attrapais déjà certains mauvais réflexes après avoir consulté diverses docs qui s'en servent beaucoup sad

Je marque le post comme résolu  ! Merci encore !

PS : Je posterai mon script fini, peut-être que ça intéressera quelqu'un.

Hors ligne

#5 Le 03/05/2009, à 11:12

Phi

Re : [Résolu] Script d'installation des paquets préférés

Je m'aperçois que je n'ai pas encore marqué le topic comme résolu et c'est tant mieux smile J'ai un autre petit problème... Je cherche à mettre tous les paquets que je juge intéressants dans un tableau pour le parcourir et demander pour chacun d'entre eux à l'utilisateur s'il en veut ou pas wink

Seulement voilà, je voudrais que certains paquets soient pris ensemble (comme les paquets de gstreamer ou encore comme dvdrip et mplayer car je n'installe le second que parce qu'il sert au premier...). Seulement, à la lecture de mon tableau, si un espace est rencontré... on oublie la suite et on passe à l'élément suivant (on oublie donc mplayer par exemple...

#!/bin/bash

MES_PAQUETS=("rar" "gnome-do" "vlc" "gmountiso" "filezilla" "grisbi" "dvdrip mplayer" "nautilus-open-terminal" "virtualbox-ose" "wine" "gstreamer0.10-ffmpeg gstreamer0.10-plugins-ugly")

# Ajout d'un paquet a la commande apt-get install pour tout installer en une fois
function ajoute_paquet
{
	paquet=$1
	echo "Voulez-vous installer le(s) paquet(s) [$paquet] ? (o/n)"
	read reponse_ajout_paquet
	
	if [ $reponse_ajout_paquet == 'o' ]; then
		if [ "$liste_paquets" == "" ]; then
			# Premier paquet, pas d'espace
			liste_paquets="$paquet"
		else
			# Un espace avant d'ajouter le nouveau paquet
			liste_paquets="$liste_paquets $paquet"
		fi
	fi
		
	return 0
}

# Le programme doit etre lance en root
if [ $(id -u) == 0 ]; then
	# L'utilisateur est un super-utilisateur
	
	# Mises a jour de la liste des paquets
	#apt-get update
	
	# Questionne l'utilisateur pour l'ajout de certains paquets
	for i in ${!MES_PAQUETS[@]}; do
		ajoute_paquet ${MES_PAQUETS[i]}
	done
	
	apt-get --assume-yes install $liste_paquets
			
	# Installation de libdvdcss
	#/usr/share/doc/libdvdread4/install-css.sh
	
	# Installation de Metamorphose
	#dpkg -i ./install_fichiers/metamorphose_2.0.6.0-1_all.deb
	#apt-get --assume-yes -f install
	
	# Mise a jour de tout le systeme
	#apt-get upgrade
	
	# Deplacement du wallpaper
	#cp -r ./install_fichiers/chameleon /usr/share/backgrounds/
else
	# L'utilisateur n'est pas un super-utilisateur
	echo "install: Nécessite d'être super-utilisateur (root)";
fi

exit 0

Voila ma sortie sur un terminal :

moi@mon-pc:~/scripts$ sudo ./install
Voulez-vous installer le(s) paquet(s) [rar] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [gnome-do] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [vlc] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [gmountiso] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [filezilla] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [grisbi] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [dvdrip] ? (o/n) # il manque mplayer...
o
Voulez-vous installer le(s) paquet(s) [nautilus-open-terminal] ? (o/n)
n
Voulez-vous installer le(s) paquet(s) [virtualbox-ose] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [wine] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [gstreamer0.10-ffmpeg] ? (o/n) # il manque le paquet ugly...
o
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
rar est déjà la plus récente version disponible.
gnome-do est déjà la plus récente version disponible.
vlc est déjà la plus récente version disponible.
gmountiso est déjà la plus récente version disponible.
filezilla est déjà la plus récente version disponible.
grisbi est déjà la plus récente version disponible.
dvdrip est déjà la plus récente version disponible.
virtualbox-ose est déjà la plus récente version disponible.
wine est déjà la plus récente version disponible.
gstreamer0.10-ffmpeg est déjà la plus récente version disponible.
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.

Hors ligne

#6 Le 03/05/2009, à 12:11

Totor

Re : [Résolu] Script d'installation des paquets préférés

loopx a écrit :

pas mettre de " partout wink

Phi a écrit :

[...]Alors effectivement, les guillemets semblent parfois inutiles. Débutant, j'attrapais déjà certains mauvais réflexes[...]

Bien au contraire, les guillemets sont préconisés. Ils sont simplement mal employés dans le cas présent. Et pas seulement au moment de passer le paramètre à apt-get. En effet, lors des comparaisons de chaine de caractères.
Ceci :

if [ $reponse_ajout_paquet == 'o' ]; then

devrait être écrit

if [ "${reponse_ajout_paquet}" = 'o' ]; then

Je n'ai pas le temps de donner la solution aux problèmes rencontrés. Je reviendrais plus tard.


-- Lucid Lynx --

Hors ligne

#7 Le 03/05/2009, à 13:43

AnsuzPeorth

Re : [Résolu] Script d'installation des paquets préférés

Bjr,
Pourquoi ne pas utiliser une interface graphique, comme zenity par exemple ? Je pense que ça pourrait simplifier le tout !


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#8 Le 03/05/2009, à 14:13

Phi

Re : [Résolu] Script d'installation des paquets préférés

Totor a écrit :
loopx a écrit :

pas mettre de " partout wink

Phi a écrit :

[...]Alors effectivement, les guillemets semblent parfois inutiles. Débutant, j'attrapais déjà certains mauvais réflexes[...]

Bien au contraire, les guillemets sont préconisés. Ils sont simplement mal employés dans le cas présent. Et pas seulement au moment de passer le paramètre à apt-get. En effet, lors des comparaisons de chaine de caractères.
Ceci :

if [ $reponse_ajout_paquet == 'o' ]; then

devrait être écrit

if [ "${reponse_ajout_paquet}" = 'o' ]; then

Je n'ai pas le temps de donner la solution aux problèmes rencontrés. Je reviendrais plus tard.

Merci bien pour ces conseils avisés, je me documenterai un peu sur la question parce que je vois mal la différence pour le moment. Ceci dit, je suis friand de ces conseils de best practices !

AnsuzPeorth a écrit :

Bjr,
Pourquoi ne pas utiliser une interface graphique, comme zenity par exemple ? Je pense que ça pourrait simplifier le tout !

Je me suis déjà servi de zenity ! Un bel outil ! Ceci dit, j'aimerai faire mes scripts autrement... Simplement les lancer dans un terminal parce que je trouve ça plus facilement "maintenable" mais aussi parce qu'il est difficile de faire autrement que d'utiliser 30 fenêtres de question avec zenity et je n'aime pas trop ce genre de principe... Et puis c'est du script de maintenance (installation rapide, nettoyage du système, sauvegarde synchronisée) alors je veux pas le compliquer avec du zenity smile

Hors ligne

#9 Le 03/05/2009, à 14:15

loopx

Re : [Résolu] Script d'installation des paquets préférés

Totor a écrit :
loopx a écrit :

pas mettre de " partout wink

Phi a écrit :

[...]Alors effectivement, les guillemets semblent parfois inutiles. Débutant, j'attrapais déjà certains mauvais réflexes[...]

Bien au contraire, les guillemets sont préconisés. Ils sont simplement mal employés dans le cas présent. Et pas seulement au moment de passer le paramètre à apt-get. En effet, lors des comparaisons de chaine de caractères.
Ceci :

if [ $reponse_ajout_paquet == 'o' ]; then

devrait être écrit

if [ "${reponse_ajout_paquet}" = 'o' ]; then

Je n'ai pas le temps de donner la solution aux problèmes rencontrés. Je reviendrais plus tard.

Oui et non. les guillemets sont inutile en cas d'une chaine de caractère "simple" et sans espace par exemple. Mais oui, il faut un " " si il y a un espace.


C'est comme la commande "cd" de bash wink


cd mon répertoire     (ira pas) mais cd "mon répertoire" fonctionnerait.

Dans les guillements, ca donnerait : cd mon\ répertoire

wink



@AnsuzPeorth:

Pour avoir le plaisir de faire quelques chose qui fonctionne, pour tester et pour avoir des outils totalement personalisé smile   Si il fait un script, c'est que ce n'est pas un simple end-user basique et donc, il peut se permettre un peu plus d'amusement smile


CentOS => tout type de serveur
Ubuntu => tout bon ordinateur
Lubuntu => sur du vieux matos ;-)
Wiki perso : http://pix.noip.me

Hors ligne

#10 Le 03/05/2009, à 18:19

loopx

Re : [Résolu] Script d'installation des paquets préférés

Phi a écrit :

Je m'aperçois que je n'ai pas encore marqué le topic comme résolu et c'est tant mieux smile J'ai un autre petit problème... Je cherche à mettre tous les paquets que je juge intéressants dans un tableau pour le parcourir et demander pour chacun d'entre eux à l'utilisateur s'il en veut ou pas wink

Seulement voilà, je voudrais que certains paquets soient pris ensemble (comme les paquets de gstreamer ou encore comme dvdrip et mplayer car je n'installe le second que parce qu'il sert au premier...). Seulement, à la lecture de mon tableau, si un espace est rencontré... on oublie la suite et on passe à l'élément suivant (on oublie donc mplayer par exemple...

#!/bin/bash

MES_PAQUETS=("rar" "gnome-do" "vlc" "gmountiso" "filezilla" "grisbi" "dvdrip mplayer" "nautilus-open-terminal" "virtualbox-ose" "wine" "gstreamer0.10-ffmpeg gstreamer0.10-plugins-ugly")

# Ajout d'un paquet a la commande apt-get install pour tout installer en une fois
function ajoute_paquet
{
	paquet=$1
	echo "Voulez-vous installer le(s) paquet(s) [$paquet] ? (o/n)"
	read reponse_ajout_paquet
	
	if [ $reponse_ajout_paquet == 'o' ]; then
		if [ "$liste_paquets" == "" ]; then
			# Premier paquet, pas d'espace
			liste_paquets="$paquet"
		else
			# Un espace avant d'ajouter le nouveau paquet
			liste_paquets="$liste_paquets $paquet"
		fi
	fi
		
	return 0
}

# Le programme doit etre lance en root
if [ $(id -u) == 0 ]; then
	# L'utilisateur est un super-utilisateur
	
	# Mises a jour de la liste des paquets
	#apt-get update
	
	# Questionne l'utilisateur pour l'ajout de certains paquets
	for i in ${!MES_PAQUETS[@]}; do
		ajoute_paquet ${MES_PAQUETS[i]}
	done
	
	apt-get --assume-yes install $liste_paquets
			
	# Installation de libdvdcss
	#/usr/share/doc/libdvdread4/install-css.sh
	
	# Installation de Metamorphose
	#dpkg -i ./install_fichiers/metamorphose_2.0.6.0-1_all.deb
	#apt-get --assume-yes -f install
	
	# Mise a jour de tout le systeme
	#apt-get upgrade
	
	# Deplacement du wallpaper
	#cp -r ./install_fichiers/chameleon /usr/share/backgrounds/
else
	# L'utilisateur n'est pas un super-utilisateur
	echo "install: Nécessite d'être super-utilisateur (root)";
fi

exit 0

Voila ma sortie sur un terminal :

moi@mon-pc:~/scripts$ sudo ./install
Voulez-vous installer le(s) paquet(s) [rar] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [gnome-do] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [vlc] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [gmountiso] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [filezilla] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [grisbi] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [dvdrip] ? (o/n) # il manque mplayer...
o
Voulez-vous installer le(s) paquet(s) [nautilus-open-terminal] ? (o/n)
n
Voulez-vous installer le(s) paquet(s) [virtualbox-ose] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [wine] ? (o/n)
o
Voulez-vous installer le(s) paquet(s) [gstreamer0.10-ffmpeg] ? (o/n) # il manque le paquet ugly...
o
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
rar est déjà la plus récente version disponible.
gnome-do est déjà la plus récente version disponible.
vlc est déjà la plus récente version disponible.
gmountiso est déjà la plus récente version disponible.
filezilla est déjà la plus récente version disponible.
grisbi est déjà la plus récente version disponible.
dvdrip est déjà la plus récente version disponible.
virtualbox-ose est déjà la plus récente version disponible.
wine est déjà la plus récente version disponible.
gstreamer0.10-ffmpeg est déjà la plus récente version disponible.
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.

Aucune idée de comment résoudre ce problème que je concoit bien. Mais, j'ai peut être une solution pour contourner ce souci ... Dans ton tableau, tu as 2 paquets dans une cellule :

"a b"

Tu pourrais utiliser un caractère magique :

"a%b" ou autre ...


et, juste avant d'utiliser ta ligne avec tout les paquets, tu remplace le "%" par un " "  ;-)     


Hop, le tour est joué big_smile       C'est pas très beau, mais ca doit fonctionner ; le mieux serait de mieux connaitre les tableau.

Mieux, je viens d'y penser, .. pourquoi ne pas utiliser un tableau à 2 dimention ? Avec ligne et colonne ? tu conserve tes colones, mais tu pourrais utiliser une 2ème ligne, 3ème ligne etc .. (tu test si il existe encore des lignes pour une colonnes donné) et hop, tu pourra ainsi stocké les autres paquests nécessaire.

Tu devrais repenser tout de A à Z avant coder, car tu pourrais devoir tout changer et ca risque de te saouler wink


CentOS => tout type de serveur
Ubuntu => tout bon ordinateur
Lubuntu => sur du vieux matos ;-)
Wiki perso : http://pix.noip.me

Hors ligne

#11 Le 03/05/2009, à 18:37

AnsuzPeorth

Re : [Résolu] Script d'installation des paquets préférés

Bjr,
Bon , si zenity vous plait pas, il y a aussi gtkdialog (qui est bien mieux), mais si le but est de s'amuser avec la console, c'est inutile !
Pour ton soucis, une idée (qui vaut ce qu'elle vaut):
Si par exemple pour l'installation de dvdrip il faut y ajouter mplayer, il suffirait de verifier la presence de dvdrip dans la variable pour la modifier en y ajoute mplayer.

[ "$(grep dvdrip <<< $paquet)" ] && paquet="dvdrip mplayer"

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#12 Le 03/05/2009, à 19:51

loopx

Re : [Résolu] Script d'installation des paquets préférés

AnsuzPeorth a écrit :

Bjr,
Bon , si zenity vous plait pas, il y a aussi gtkdialog (qui est bien mieux), mais si le but est de s'amuser avec la console, c'est inutile !
Pour ton soucis, une idée (qui vaut ce qu'elle vaut):
Si par exemple pour l'installation de dvdrip il faut y ajouter mplayer, il suffirait de verifier la presence de dvdrip dans la variable pour la modifier en y ajoute mplayer.

[ "$(grep dvdrip <<< $paquet)" ] && paquet="dvdrip mplayer"

C'est encore plus lourd (plusieurs grep) et rend la maintenance un rien plus complexe je pense ...


Sympa le "<<<" tongue   je connaissais pas tongue


CentOS => tout type de serveur
Ubuntu => tout bon ordinateur
Lubuntu => sur du vieux matos ;-)
Wiki perso : http://pix.noip.me

Hors ligne

#13 Le 03/05/2009, à 22:58

Totor

Re : [Résolu] Script d'installation des paquets préférés

loopx a écrit :

Oui et non. les guillemets sont inutile en cas d'une chaine de caractère "simple" et sans espace par exemple. Mais oui, il faut un " " si il y a un espace.

Certe, mais c'est une bien mauvaise pratique de se dire : "tiens, puis me permettre de ne pas mettre des guillemets dans ce cas ?"
Que fais-tu de cette question :  "Suis-je sur que le script ne va jamais évolué et que les guillemets seront toujours inutiles ?"
Il existe toutefois des cas très particuliers ... Mais leur emploi garantie une cohérence syntaxique et le bon fonctionnement du script dans 99,9% des cas.

Exemple pouvant générer une erreur syntaxique :

[...]if [ $reponse_ajout_paquet == 'o' ]; then[...]

Si l'utilisateur ne saisi aucune valeur à la question qui lui est posée, le script est en erreur (bash: [: == : opérateur unaire attendu) Tout simplement car il doit interpréter le code comme suit :

[...]if [ == o ]; then[...]

...il lui manque donc quelque chose à comparer.

L'erreur de fonctionnement est typiquement des données avec espace :

#!/bin/bash
MES_PAQUETS=("rar" "gnome-do" "vlc" "gmountiso" "filezilla" "grisbi" "dvdrip mplayer" "nautilus-open-terminal" "virtualbox-ose" "wine" "gstreamer0.10-ffmpeg gstreamer0.10-plugins-ugly")
[...]
   
    # Questionne l'utilisateur pour l'ajout de certains paquets
    for j in ${!MES_PAQUETS[@]}; do
        ajoute_paquet ${MES_PAQUETS[j]}
    done

Dans le cas "dvdrip mplayer", la non-utilisation des guillemets lors de l'appel à la fonction ajout_paquet se traduit par :

ajoute_paquet dvdrip mplayer

ajoute_paquet reçoit donc 2 paramètres et non 1 seul. Pour éviter cela :

for j in ${!MES_PAQUETS[@]}; do
        ajoute_paquet "${MES_PAQUETS[j]}"
done

Cela dit, une autre solution :

function ajoute_paquet
{
    paquet="$@"
    echo "Voulez-vous installer le(s) paquet(s) [${paquet[@]}] ? (o/n)"
    read reponse_ajout_paquet
   
    if [ $reponse_ajout_paquet == 'o' ]; then
        if [ "$liste_paquets" == "" ]; then
            # Premier paquet, pas d'espace
            liste_paquets="$paquet"
        else
            # Un espace avant d'ajouter le nouveau paquet
            liste_paquets="$liste_paquets ${paquet[@]}"
        fi
    fi
       
    return 0
}

au passage :

for j in "${MES_PAQUETS[@]}"; do
        ajoute_paquet "${j}"
    done
[...]

est préféré à

[...]
for j in ${!MES_PAQUETS[@]}; do
        ajoute_paquet ${MES_PAQUETS[j]}
    done
[...]

Maintenant, le problème initiale n'est pas dans l'utilisation ou non des guillemets mais plutôt d'ordre conceptuel. En effet, l'erreur est de considérer que la variable liste_paquets est une chaine de caractères contenant la liste des paquets. Ma vision serait de la considérer comme un tableau de chaine de caractères (donc de paquets).
Si l'on raisonne ainsi et en mettant des guillemets le script devient :

#!/bin/bash

MES_PAQUETS=("rar" "gnome-do" "vlc" "gmountiso" "filezilla" "grisbi" "dvdrip mplayer" "nautilus-open-terminal" "virtualbox-ose" "wine" "gstreamer0.10-ffmpeg gstreamer0.10-plugins-ugly")

# Ajout d'un paquet a la commande apt-get install pour tout installer en une fois
function ajoute_paquet
{
    paquet=($1)
    read -p "Voulez-vous installer le(s) paquet(s) [${paquet[*]}] (o/n) ? " reponse_ajout_paquet
    
    if [[ "${reponse_ajout_paquet}" = [oO] ]]; then
        liste_paquets=("${liste_paquets[@]}" "${paquet[@]}")
    fi
        
    return 0
}

# Le programme doit etre lance en root
if [ $(id -u) == 0 ]; then
    # L'utilisateur est un super-utilisateur
    
    # Mises a jour de la liste des paquets
    #apt-get update
    
    # Questionne l'utilisateur pour l'ajout de certains paquets
    for element in "${MES_PAQUETS[@]}"; do      
        ajoute_paquet "${element}"
    done
    
    apt-get --assume-yes install "${liste_paquets[@]}"
            
    # Installation de libdvdcss
    #/usr/share/doc/libdvdread4/install-css.sh
    
    # Installation de Metamorphose
    #dpkg -i ./install_fichiers/metamorphose_2.0.6.0-1_all.deb
    #apt-get --assume-yes -f install
    
    # Mise a jour de tout le systeme
    #apt-get upgrade
    
    # Deplacement du wallpaper
    #cp -r ./install_fichiers/chameleon /usr/share/backgrounds/
else
    # L'utilisateur n'est pas un super-utilisateur
    echo "install: Nécessite d'être super-utilisateur (root)";
fi

exit 0

Note : Le seul endroit où l'utilisation ou non des guillemets n'est pas anodin, c'est lors de la création du tableau en début de la fonction. En effet, un seul paramètre est passé à la fonction ($1). Du coup, Si $1 contient plusieurs mots et qu'on l'encadre par des guillemets, alors le tableau ne sera constitué que d'un seul élément et non d'autant de mots qu'est constitué le paramètre $1.

Dernière modification par Totor (Le 03/05/2009, à 23:01)


-- Lucid Lynx --

Hors ligne

#14 Le 03/05/2009, à 23:58

loopx

Re : [Résolu] Script d'installation des paquets préférés

@Totor :

Intéressant, tu as de très bon argument tongue


CentOS => tout type de serveur
Ubuntu => tout bon ordinateur
Lubuntu => sur du vieux matos ;-)
Wiki perso : http://pix.noip.me

Hors ligne

#15 Le 04/05/2009, à 00:39

AnsuzPeorth

Re : [Résolu] Script d'installation des paquets préférés

loopx a écrit :

Sympa le "<<<" tongue   je connaissais pas tongue

Je tiens ça du maitre totor smile (on en apprends beaucoup en le lisant, il y a qqles 'spécimens' en son genre sur ce forum, pas assez malheureusement)
D'ailleurs il avait expliqué l'utilisation du tild pour la comparaison, qui aurait pu remplacer le grep (arff, j'ai pas bien appris mes cours, j'y pense jamais smile) , mais qui de toute facon sera plus gourmand que ta solution, surtout que depuis hier, je sais qu"une ER est plus couteux qu'une commande 'simple' (provenant tjrs de la même source, totor)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#16 Le 04/05/2009, à 10:42

soupaloignon

Re : [Résolu] Script d'installation des paquets préférés

Salut les fous furieux du script wink

C'est toujours un plaisir de lire vos interventions


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#17 Le 04/05/2009, à 11:08

loopx

Re : [Résolu] Script d'installation des paquets préférés

AnsuzPeorth a écrit :
loopx a écrit :

Sympa le "<<<" tongue   je connaissais pas tongue

Je tiens ça du maitre totor smile (on en apprends beaucoup en le lisant, il y a qqles 'spécimens' en son genre sur ce forum, pas assez malheureusement)
D'ailleurs il avait expliqué l'utilisation du tild pour la comparaison, qui aurait pu remplacer le grep (arff, j'ai pas bien appris mes cours, j'y pense jamais smile) , mais qui de toute facon sera plus gourmand que ta solution, surtout que depuis hier, je sais qu"une ER est plus couteux qu'une commande 'simple' (provenant tjrs de la même source, totor)

yikes


Cquoi un "ER" yikes ?


CentOS => tout type de serveur
Ubuntu => tout bon ordinateur
Lubuntu => sur du vieux matos ;-)
Wiki perso : http://pix.noip.me

Hors ligne

#18 Le 04/05/2009, à 14:03

Totor

Re : [Résolu] Script d'installation des paquets préférés

loopx a écrit :

Cquoi un "ER" yikes ?

Expression Régulière
Il existe aussi des Expressions Régulières Etendues.


-- Lucid Lynx --

Hors ligne

#19 Le 04/05/2009, à 15:05

loopx

Re : [Résolu] Script d'installation des paquets préférés

AnsuzPeorth a écrit :
loopx a écrit :

Sympa le "<<<" tongue   je connaissais pas tongue

Je tiens ça du maitre totor smile (on en apprends beaucoup en le lisant, il y a qqles 'spécimens' en son genre sur ce forum, pas assez malheureusement)
D'ailleurs il avait expliqué l'utilisation du tild pour la comparaison, qui aurait pu remplacer le grep (arff, j'ai pas bien appris mes cours, j'y pense jamais smile) , mais qui de toute facon sera plus gourmand que ta solution, surtout que depuis hier, je sais qu"une ER est plus couteux qu'une commande 'simple' (provenant tjrs de la même source, totor)

Ben, un ER, c'est aussi un peu comme une commande je pense ... tongue


CentOS => tout type de serveur
Ubuntu => tout bon ordinateur
Lubuntu => sur du vieux matos ;-)
Wiki perso : http://pix.noip.me

Hors ligne

#20 Le 04/05/2009, à 16:49

AnsuzPeorth

Re : [Résolu] Script d'installation des paquets préférés

Bjr,
Il faut peut être remettre cette affirmation dans son contexte, j'utilisais sed et une ER pour extraire les 3 premiers caractères d'une variable, donc une commande cut, ou une substitution bash (je sais pas si c'est le nom exact), aurait ete moins gourmand.
Apres réflexion (réflexion sans connaissance spécifique en programmation), ce n'est pas étonnant qu'une ER soit gourmande.
Par exemple [0-5], le shell doit tester si le caractére est 0, 1, 2 , 3 , 4 ou 5 (je pense) .ca consomme tout ça !

D'ailleurs à ce sujet, niveau consommation ressources, qu'est ce qui est mieux (la syntaxe n'est peut etre pas tout a fait exact)

#si je dis pas de bétises =~ est pour une ER
[ "$var" =~ truc ]
[ "$(grep truc <<< "$var")" ]

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#21 Le 04/05/2009, à 17:09

loopx

Re : [Résolu] Script d'installation des paquets préférés

yikes

me semble que j'ai confondu ER et les conditions ... La, je rejoind tout à fait "AnsuzPeorth" quand à la lourdeur d'une ER ... c'est tout à fait naturel en fait wink


CentOS => tout type de serveur
Ubuntu => tout bon ordinateur
Lubuntu => sur du vieux matos ;-)
Wiki perso : http://pix.noip.me

Hors ligne

#22 Le 04/05/2009, à 18:28

AnsuzPeorth

Re : [Résolu] Script d'installation des paquets préférés

loopx a écrit :

La, je rejoind tout à fait "AnsuzPeorth" quand à la lourdeur d'une ER ... c'est tout à fait naturel en fait wink

Ce n'est pas une affirmation de ma part, mais plutot une question, j'en sais rien comment ca se passe, j'imaginais juste smile


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#23 Le 05/05/2009, à 14:48

nicolas66

Re : [Résolu] Script d'installation des paquets préférés

Tiens c'est marrant, j'ai codé un truc similaire ya environ une semaine big_smile


"The computer was born to solve problems that did not exist before." (B. Gates)

Hors ligne

#24 Le 09/05/2009, à 13:38

trucutu

Re : [Résolu] Script d'installation des paquets préférés

Bonjour,

Intéressant ce projet.
Je pense que d'expérience, beaucoup ont des projets similaires quand ils doivent installer une liste de paquets "préférés".

Pour moi, tout est dans un fichier texte (en colonne), et j'ai fais un simple

apt-get install $(cat fichier.txt)

Cela suppose que l'utilisateur sait ce qu'il veut (pas de demande de confimation pour chaque paquet).

Minimaliste mais bon...
Il doit y avoir moyen de faire des trucs plus élaborés avec une IHM et tout, donc chacun peut faire ses outils à loisir.

Bon courage pour la suite


La chanson du dimanche - "La pêche !"
PC acheté chez Novatux : entièrement satisfait.
Faire des recherches solidaires !

Hors ligne

#25 Le 10/05/2009, à 17:29

Phi

Re : [Résolu] Script d'installation des paquets préférés

Franchement, merci ! Je n'en attendais pas tant !

Hors ligne