#1 Le 21/03/2011, à 19:24
- Christophe C
[résolu] générer une variable à partir d'une autre
Bonjour,
Je suis niveau "petit scarabé" en bash. J'aurais besoin de générer une variable à partir d'une autre. je m'explique : si je choisit dans une boite de dialogue une de mes étiquettes de partition (variable $partition), je voudrais générer une seconde variable $numsda en fonction de la première, selon l'équivalence suivante :
- si $partition = unity, alors $numsda=5
- si $partition = kubuntu, alors $numsda=3
- si $partition = lubuntu, alors $numsda=1
Mon script actuel est le suivant :
#!/bin/bash
if ret=`zenity --entry --title="Choix des partitions" --text="Veuillez indiquer la partition à monter" kubuntu lubuntu unity `
then partition=$ret
else
zenity --info --text "Vous avez appuyé sur le bouton ANNULER !"
exit
fi
#
zenity --info --text "$partition "
zenity --info --text "$numsda "
Comme vous le constatez, la variable $numsda n'est définie nul part. C'est cela que je ne sais pas gérer.
Merci d'avance.
Dernière modification par Christophe C (Le 23/03/2011, à 12:49)
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#2 Le 21/03/2011, à 20:28
- jaco-jalo
Re : [résolu] générer une variable à partir d'une autre
Ce code fait ce que tu as eu envie de faire
Cependant une variable n'existe que dans le bloc d'instruction ou elle a été déclaré
#!/bin/bash
if ret=`zenity --entry --title="Choix des partitions" --text="Veuillez indiquer la partition à monter" kubuntu lubuntu unity `
then partition=$ret
else
zenity --info --text "Vous avez appuyé sur le bouton ANNULER !"
exit
fi
#
partion=$ret
A="unity"
B="kubuntu"
C="lubuntu"
if [ $partion = $A ]
then
numsda=5
fi
if [ $partion = $B ]
then
numsda=3
fi
if [ $partion = $C ]
then
numsda=1
fi
zenity --info --text "$partition "
zenity --info --text "$numsda "
Hors ligne
#3 Le 21/03/2011, à 20:58
- Christophe C
Re : [résolu] générer une variable à partir d'une autre
Ok, ça à l'air de marcher.Merci !
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#4 Le 21/03/2011, à 20:59
- FRUiT
Re : [résolu] générer une variable à partir d'une autre
unity=5
kubuntu=3
lubuntu=1
for partition in unity kubuntu lubuntu; do
echo ${!partition}
# Ou numsda=${!partition}
done
...
partition="kubuntu"
numsda=${!partition}
echo $numsda
...
Dernière modification par FRUiT (Le 21/03/2011, à 21:16)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#5 Le 21/03/2011, à 21:12
- Christophe C
Re : [résolu] générer une variable à partir d'une autre
Bon, question suivante :
Gtace à jaco-jalo, j'ai fais un script qui marche très bien... dans un terminal (je dois saisir mon mot de passe pour un dist-upgrade). Par contre, comment saisir mon mot de passe si je ne lance pas le script dans un terminal ? Apparemment, dans ce cas, rien ne marche.
Voici le script complet :
#!/bin/bash
# --------------------------------------------------------------------
#boite de dialogue ou je choisis la partition à monter
# --------------------------------------------------------------------
if ret=`zenity --entry --title="Choix des partitions" --text="Veuillez indiquer la partition à monter" kubuntu lubuntu unity `
then titre=$ret
else
echo "Vous avez appuyé sur le bouton annuler !"
sleep 3
exit
fi
#
#
# ------------------------------------------------------------------------------------------------------------
# génération de la variable "numsda", qui donne le N° de partition du disque SDA monté
# ------------------------------------------------------------------------------------------------------------
partition=$ret #rappel que la variable "partition" est = au résultat de la boite de dialogue zenity ci-dessus
A="unity" #
B="kubuntu" #définition des 3 variables de comparaison avec $partition
C="lubuntu" #
if [ $partition = $A ]
then numsda=5
fi
if [ $partition = $B ]
then numsda=3
fi
if [ $partition = $C ]
then numsda=1
fi
#
#
# --------------------------------------------------------------------------
# lance la prise de contrôle à distance
# --------------------------------------------------------------------------
(
sudo rmdir /media/$titre #destruction du répertoire de montage (à tout hasard, il devrait déjà être effacé)
sudo mkdir /media/$titre #création du répertoire de montage
sudo mount /dev/sda$numsda /media/$titre #monter la partition - le N° du sda dépend de l'ordre de démarrage dans le bios
sudo mount --bind /dev /media/$titre/dev #(monter le répertoire dev), puis
sudo mount -t proc /proc /media/$titre/proc #(monter le répertoire proc), puis
sudo mount -t sysfs /sys /media/$titre/sys #(monter le répertoire sys), puis
)| zenity --progress --auto-close --text="Etape 1/3 - montage de la partition $titre sur sda$numsda en cours ..." --pulsate
#
#
# -----------------------------------------------------------------------------------
#lancer les mises à jour distantes
# -----------------------------------------------------------------------------------
(
sudo cp /etc/resolv.conf /media/$titre/etc/resolv.conf #(copier depuis maverick le fichier de config de la connexion internet), puis
sudo chroot /media/$titre apt-get update #Je prend la main sur l'autre partition pour récupérer la liste des paquets
sudo chroot /media/$titre apt-get dist-upgrade -y #lancer les mises à jour
)| zenity --progress --auto-close --text="Etape 2/3 - lancer les mises à jour distantes (en chroot) de $titre sur sda$numsda" --pulsate
#
#
# ------------------------------------------------------------------------------
#démonter la partition
# ------------------------------------------------------------------------------
(
sudo umount /media/$titre/dev
sudo umount /media/$titre/proc
sudo umount /media/$titre/sys
sudo umount /media/$titre
)| zenity --progress --auto-close --text="Etape 3/3 - démontage partition en cours " --pulsate
#
#
# --------------------------------------------------------------------------------------
#Message de FIN
# --------------------------------------------------------------------------------------
zenity --info --text "Mise à jour de $titre sur sda$numsda TERMINEE "
Comment faire pour avoir la demande du mot de passe pour le dist-upgrade en mode tout graphique sans passer par le terminal ?
Dernière modification par Christophe C (Le 21/03/2011, à 21:16)
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#6 Le 21/03/2011, à 21:15
- FRUiT
Re : [résolu] générer une variable à partir d'une autre
Utilise gksudo/kdesudo au lieu de sudo.
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#7 Le 21/03/2011, à 21:18
- Christophe C
Re : [résolu] générer une variable à partir d'une autre
humm. Je me demande si gksudo marche avec chroot ?
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#8 Le 21/03/2011, à 21:25
- Christophe C
Re : [résolu] générer une variable à partir d'une autre
en fait, en toute logique, je suppose que je ne soit mettre un gksudo que sur le premier sudo ? Après ça ne sert plus à rien ?
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#9 Le 21/03/2011, à 21:27
- FRUiT
Re : [résolu] générer une variable à partir d'une autre
Mmm je ne connais pas (encore) chroot... Après tout ça coute rien d'essayer non ?
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#10 Le 21/03/2011, à 22:02
- Christophe C
Re : [résolu] générer une variable à partir d'une autre
Yep !
D'ailleurs on dirait que ça marche.
Merci.
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#11 Le 21/03/2011, à 22:53
- FRUiT
Re : [résolu] générer une variable à partir d'une autre
De rien.
Sinon ce que tu cherchais à faire dans ton post#1 s'appelle l'indirection, c'est ce que j'ai mis en exemple post#4 tu as pas essayé ?
Ca simplifie quand même grandement les choses :
#!/bin/bash
if ret=`zenity --entry --title="Choix des partitions" --text="Veuillez indiquer la partition à monter" kubuntu lubuntu unity `
then partition=$ret
else
zenity --info --text "Vous avez appuyé sur le bouton ANNULER !"
exit
fi
#
partition=$ret
unity=5
kubuntu=3
lubuntu=1
numsda=${!partition}
zenity --info --text "$partition "
zenity --info --text "$numsda "
En tout cas même si tu n'utilises pas la référence indirecte, la déclaration des variables A B et C est inutile. Tu peux tester directement :
[ "$partition" = "kubuntu" ] && numsda=3
[ "$partition" = "lubuntu" ] && numsda=1
etc...
Tu peux même faire un case :
case $partition in
unity) numsda=1 ;;
kubuntu) numsda=3 ;;
lubuntu) numsda=1 ;;
esac
Dernière modification par FRUiT (Le 22/03/2011, à 11:13)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#12 Le 23/03/2011, à 12:48
- Christophe C
Re : [résolu] générer une variable à partir d'une autre
j'avoue que le post 4 me reste totalement obscure. Je ne suis pas informaticien, et je préfère en rester à un code que je comprend. Ce qui est le cas du post 2.
Je vais qd même creuser ce que tu a mis dans le post 11 : j'ai l'impression de comprendre ;-)
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#13 Le 23/03/2011, à 13:03
- FRUiT
Re : [résolu] générer une variable à partir d'une autre
j'avoue que le post 4 me reste totalement obscure. Je ne suis pas informaticien, et je préfère en rester à un code que je comprend. Ce qui est le cas du post 2.
Moi je verrais plutôt là une bonne occasion d'apprendre de nouvelles choses,surtout que ça répondait directement à ta demande en titre de topic : "générer une variable à partir d'une autre", après c'est toi qui voit. En tout cas le code que j'ai mis dans le post#11 avec la référence indirecte marche tel quel, à la limite tu as juste à le copier-coller (et l'étudier).
Enfin tant que ça marche... ^^, merci pour le résolu.
[EDIT] Pour expliquer un peu, en gros ${!partition} va se développer en une variable dont le nom est le contenu de la variable partition, donc soit en ${unity} soit en ${kubuntu} soit en ${lubuntu} en fonction du résultat du choix de l'utilisateur dans zenity ($partition pouvant alors prendre comme valeur "unity" "kubuntu" ou "lubuntu"). Comme ces 3 variables (unity, kubuntu, lubuntu) ont été définies, tu auras soit numsda=${unity} (donc 5) soit numsda=${kubuntu} (donc 3) soit numsda=${lubuntu} (1).
Un exemple plus basique :
#!/bin/bash
var="variable"
variable="dynamique"
echo "Ma $var est une ${var} ${!var}"
// Resultat : Ma variable est une variable dynamique
Source : http://www.placeoweb.com/dotclear/index … as-oublier
Dernière modification par FRUiT (Le 23/03/2011, à 13:25)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne