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

Christophe C a écrit :

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