Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3018 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [RESOLU] Variable et boucle for ..

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Variable et boucle for ..

n°1082115
Drix75
Posté le 16-10-2008 à 13:23:37  profilanswer
 

Bonjour à tous,
Il y a quelque chose que je n'arrive pas à réaliser avec un shell script.Je m'explique.
Je passe comme arguments à une boucle for une série de variable d'environnements qui contiennent des chemins :  
 
[preappl11i@rexfraappt001 drp]$ echo $APPL_TOP
/preprod/preprodappl
[preappl11i@rexfraappt001 drp]$ echo $COMMON_TOP
/preprod/preprodcomn
[preappl11i@rexfraappt001 drp]$
 
J'aimerais, dans  la boucle for afficher le nom de la variable et le contenu.
Si je fais ça, le contenue de la variable s'affcihe
 
for REP in $APPL_TOP $COMMON_TOP  ; do
 
echo -e  " $REP  :      "
 
done
 
si je fais ça, le nom de la variable s'affiche :  
for REP in APPL_TOP COMMON_TOP  ; do
 
echo -e  "$REP :     "
 
done
 
La question est : comment réussir à afficher le nom et le contenu des variables dans la même boucle ?
Si quelqu'un à une idée ....


Message édité par Drix75 le 16-10-2008 à 17:15:32
mood
Publicité
Posté le 16-10-2008 à 13:23:37  profilanswer
 

n°1082116
Fork Bomb
Obsédé textuel
Posté le 16-10-2008 à 13:25:32  profilanswer
 

Single quote et double quote.
Pas de quoi [:prodigy]


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
n°1082120
Drix75
Posté le 16-10-2008 à 13:31:11  profilanswer
 

Oui je m'en doutait un peu  mais je ne trouve pas la bonne "combinaison"  à utiliser !


Message édité par Drix75 le 16-10-2008 à 13:31:31
n°1082121
Fork Bomb
Obsédé textuel
Posté le 16-10-2008 à 13:38:05  profilanswer
 

PWET="Yooplaboom"
echo '$PWET' --> Affichage de $PWET
echo "$PWET" --> Affichage de Yooplaboom


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
n°1082135
Drix75
Posté le 16-10-2008 à 14:44:08  profilanswer
 

Merci, mais cela ne focntionne pas :
[preappl11i@rexfraappt001 drp]$ echo  $APPL_TOP $COMMON_TOP
/preprod/preprodappl /preprod/preprodcomn
[preappl11i@rexfraappt001 drp]$
[preappl11i@rexfraappt001 drp]$ for REP in $APPL_TOP $COMMON_TOP  ; do echo $REP '$REP' "$REP" ; done
/preprod/preprodappl $REP /preprod/preprodappl
/preprod/preprodcomn $REP /preprod/preprodcomn
[preappl11i@rexfraappt001 drp]$ for REP in APPL_TOP COMMON_TOP  ; do echo $REP '$REP' "$REP" ; done
APPL_TOP $REP APPL_TOP
COMMON_TOP $REP COMMON_TOP
[preappl11i@rexfraappt001 drp]$
 :(

n°1082136
wedgeant
Da penguin inside
Posté le 16-10-2008 à 14:46:57  profilanswer
 

tu veux pas mettre des balise "code" ou "fixed" des fois, histoire que ça soit lisible ? [:toukc]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°1082139
Drix75
Posté le 16-10-2008 à 15:02:43  profilanswer
 

Yep !   :D  
 
preappl11i@rexfraappt001 drp]$ echo  $APPL_TOP $COMMON_TOP

/preprod/preprodappl /preprod/preprodcomn


 
[preappl11i@rexfraappt001 drp]$
[preappl11i@rexfraappt001 drp]$
[preappl11i@rexfraappt001 drp]$ for REP in $APPL_TOP $COMMON_TOP  ; do echo $REP  '$REP'  "$REP" ; done

/preprod/preprodappl   $REP   /preprod/preprodappl


/preprod/preprodcomn   $REP   /preprod/preprodcomn


 
preappl11i@rexfraappt001 drp]$
preappl11i@rexfraappt001 drp]$
[preappl11i@rexfraappt001 drp]$ for REP in APPL_TOP COMMON_TOP  ; do echo $REP   '$REP'   "$REP" ; done

APPL_TOP   $REP   APPL_TOP


COMMON_TOP   $REP   COMMON_TOP


 
[preappl11i@rexfraappt001 drp]$
 
C'est mieux comme ça ? :)  

n°1082141
wedgeant
Da penguin inside
Posté le 16-10-2008 à 15:11:32  profilanswer
 

oui :jap:

 

sinon pour répondre à ta question ... c'est pas possible :non:
à partir du moment ou tu écris

Code :
  1. for i in $toto $tata; do ...


tes variables $toto et $tata sont automatiquement traduites avant que la boucle ne soit lancée et que les valeurs soient affectées à $i :spamafote:


Message édité par wedgeant le 16-10-2008 à 15:11:45

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°1082143
Drix75
Posté le 16-10-2008 à 15:20:02  profilanswer
 

OK merci pour lma réponse.
Et si je pars sur un truc comme ça :  
 

Code :
  1. for i in toto tata; do ...


 
Est ce possible d'afficher le contenu de $toto ou $tata ?

n°1082145
wedgeant
Da penguin inside
Posté le 16-10-2008 à 15:21:51  profilanswer
 

Code :
  1. for i in toto tata; do
  2.    echo "$i" "${$i}"
  3. done
 

à essayer, sans garantie :sweat:


Message édité par wedgeant le 16-10-2008 à 15:22:19

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
mood
Publicité
Posté le 16-10-2008 à 15:21:51  profilanswer
 

n°1082152
Drix75
Posté le 16-10-2008 à 15:29:54  profilanswer
 

Déja testé , il aime pas du tout ... :  
line 19: ${$REP}: bad substitution  :sweat:  

n°1082153
Drix75
Posté le 16-10-2008 à 15:30:50  profilanswer
 

Déja testé , il aime pas du tout ... :  
line 19: ${$REP}: bad substitution  :sweat:  
Mais merci quand même  :)

n°1082154
wedgeant
Da penguin inside
Posté le 16-10-2008 à 15:31:29  profilanswer
 

ben sinon y'a la méthode Conan [:prodigy]

Code :
  1. for i in toto tata; do
  2.     tmp = "$i"
  3.     echo "$i" "$tmp"
  4. done
 

[:wark0]

 

edit: quoi que, j'ai un doute en fait [:transparency]

 

edit²: ah sinon, voir avec les fonctions "env" ou "getenv" ... [:icon3]


Message édité par wedgeant le 16-10-2008 à 15:32:39

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°1082156
matafan
Posté le 16-10-2008 à 15:35:36  profilanswer
 

Bien sûr que si c'est possible, avec eval

n°1082160
Drix75
Posté le 16-10-2008 à 15:37:35  profilanswer
 

OK merci je vais regarder ça (eval et get env)
J'update le topic quand cela sera OK !

n°1082171
Drix75
Posté le 16-10-2008 à 16:20:11  profilanswer
 

Ben ... pas mieux !!
eval sert à évaluer une commande je ne vois pas trop à quoi cela va me servir

n°1082199
matafan
Posté le 16-10-2008 à 17:05:12  profilanswer
 

Exemple :

#!/bin/sh
 
TOTO=abc
TITI=def
TATA=ghi
 
for i in TOTO TITI TATA
do
        eval "echo $i = \$$i"
done


Explication : la chaine qui suit le "eval" est evaluée par le shell, qui va remplacer les deux $i par leur valeur. Le eval va évaluer le résultat, c'est à dire par exemple pour la première boucle, la chaine "echo TOTO = $TOTO".

n°1082203
Drix75
Posté le 16-10-2008 à 17:14:51  profilanswer
 

Merci beaucoup !
Ca fonctionne ...
J'ai pas trop bien compris ce que fait concrètement eval, j'y reflechirais à tête reposé ...
Merci encore !


Message édité par Drix75 le 16-10-2008 à 17:20:44
n°1082208
matafan
Posté le 16-10-2008 à 17:25:50  profilanswer
 

Il evalue l'expression formée par la concaténation de ce que tu lui passe en argument (ici on lui passe un seul argument, qui est une chaine).

n°1082422
Drix75
Posté le 17-10-2008 à 15:42:45  profilanswer
 

En plus clair  :D , eval force le shell à interpreter une chaine de caractère comme une commande :  

[preappl11i@rexfraappt001 drp]$ echo Bonjour à tous
Bonjour à tous
[preappl11i@rexfraappt001 drp]$ export  ma_variable="echo Bonjour à tous"
[preappl11i@rexfraappt001 drp]$
[preappl11i@rexfraappt001 drp]$ echo $ma_variable
echo Bonjour à tous
[preappl11i@rexfraappt001 drp]$ eval $ma_variable
Bonjour à tous
[preappl11i@rexfraappt001 drp]$

n°1087954
sputnick
bip...bip...bip...bip...bi...b
Posté le 06-11-2008 à 21:25:17  profilanswer
 

Hop, ma contribution :)
 
 

Code :
  1. #!/bin/bash
  2. APPL_TOP=/preprod/preprodcomn
  3. COMMON_TOP=/prod/prodcomn
  4. for var in '$APPL_TOP' '$COMMON_TOP'; do
  5.     echo "La valeur est : $var"
  6.     echo -e "La variable est : $(eval echo $var)\n"
  7. done



Message édité par sputnick le 06-11-2008 à 21:26:02
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [RESOLU] Variable et boucle for ..

 

Sujets relatifs
[RESOLU]debian: grub, erreur de boot suite màj[Résolu][Squid] N'autoriser que le port 21
Erreur en compilant gcc [Résolu][Résolu]Changer sur les jpg la mauvaise heure d'un appareil photo
Nom de variable dynamique en Cshell[résolu] Amarok - trier les entrées d'une playlist par nom de fichier
[Résolu] Comment savoir si on m'a bien installé un Ubuntu 64bits ?[TUTO][RESOLU]VMWare Server/debian lenny 2.6.26-1-amd64
variable $ ?[RESOLU]install VmWare server sur debian lenny 2.6.26-1-amd64
Plus de sujets relatifs à : [RESOLU] Variable et boucle for ..


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR