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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  récupérer et réutiliser les paramètres dans un for

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

récupérer et réutiliser les paramètres dans un for

n°1348792
erlend
Posté le 18-04-2006 à 14:22:49  profilanswer
 

Bonjour,
 
Je souhaite récupérer en paramètres les variables dans un SHELL script. ce sont en fait des adresses IP.
Comme je ne connais pas le nombre exacte, j'effectue une boucle for pour toutes les récupérer.
 
J'arrive à récupérer les différentes IP :
 
for (( i=1 ; i<= $# ; i++ )) ; do
 eval IP$i=\$$i
done
 
Déjà je sais pas s'il existe une manière plus élégante d'affecter la variable.. j'ai trouvé ca par hasard.
Si je fais "echo $IP1" cela m'affiche correctement ma première adresse IP passée en paramètre.
 
Mais, je souhaite pouvoir réutiliser ses variables dans une autre boucle for :
 
for (( i=1 ; i<= $# ; i++ )) ; do
 echo $IP\$$i                         #marche pas
done
 
Et je n'arrive pas à trouver...
Merci


Message édité par erlend le 18-04-2006 à 14:39:33
mood
Publicité
Posté le 18-04-2006 à 14:22:49  profilanswer
 

n°1349297
skyofdiamo​nds
Posté le 19-04-2006 à 01:05:33  profilanswer
 

#!/bin/bash
 
for (( i=1 ; i<= $# ; i++ )) ; do  
 eval IP$i=\$$i  
done  
 
for (( i=1 ; i<= $# ; i++ )) ; do  
 eval echo $IP\$$i                          
done  
 
# tout seul sans eval "echo $IP\$$i"  signifie que tu
#imprimes la variable d env IP (qui vaut nulle)
# car ce sont les variables d environnment IP1, IP2 que tu as défines
#dans ta 1ere boucle
#puis le carcatère '$'
# puis la varaibale i (qui est une compteur sur le nombre de params
# passes)
#  

n°1349448
erlend
Posté le 19-04-2006 à 11:26:18  profilanswer
 

Je suis d'accord avec toi.
J'ai oublié de précisé une chose, excuse moi, je n'y avait plus repensé
 
il me semble que j'avais réussi à faire ce que tu viens de mettre,
mais maintenant après le echo, je souhaite compte le nombre de caractère avec wc et stocker la valeur qui est calculée
 
#!/bin/bash
 
for (( i=1 ; i<= $# ; i++ )) ; do  
 eval IP$i=\$$i  
done  
 
for (( i=1 ; i<= $# ; i++ )) ; do  
 eval echo $IP\$$i | wc -m
done  
 
Avec ceci, ca m'affiche le nombre de caractère (- 1) de mon adresse IP.
 
ET mon problème est que je ne vois pas comment faire pour stocker ce chiffre.
 
qd j'essaye de faire une affectation la plupart du temps il n'évalue plus mon expression et je me retrouve avec un 0.
j'ai vu qu'on pouvait faire des eval d'eval mais je ne m'en suis pas sorti
 
merci de ton aide

n°1349579
Sve@r
Posté le 19-04-2006 à 13:20:09  profilanswer
 

erlend a écrit :

mais maintenant après le echo, je souhaite compte le nombre de caractère avec wc et stocker la valeur qui est calculée


 
Fait attention, " wc" compte tous les caractères affichés. C'est à dire que si tu fais "echo a |wc -c", tu auras "2" et non "1" (le "a" et le retour charriot)
 
Utilises donc "expr valeur : '.*'" pour récupérer le nb de caractères...

var=`eval echo \$IP$i`
nb=`expr $var : '.*'`


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1350106
skyofdiamo​nds
Posté le 19-04-2006 à 22:18:06  profilanswer
 

erlend a écrit :

Je suis d'accord avec toi.
J'ai oublié de précisé une chose, excuse moi, je n'y avait plus repensé
 
il me semble que j'avais réussi à faire ce que tu viens de mettre,
mais maintenant après le echo, je souhaite compte le nombre de caractère avec wc et stocker la valeur qui est calculée
 

Code :
  1. #!/bin/bash
  2. for (( i=1 ; i<= $# ; i++ )) ; do 
  3. eval IP$i=\$$i 
  4. done 
  5. for (( i=1 ; i<= $# ; i++ )) ; do 
  6. eval echo $IP\$$i | wc -m
  7. done


Avec ceci, ca m'affiche le nombre de caractère (- 1) de mon adresse IP.
 
ET mon problème est que je ne vois pas comment faire pour stocker ce chiffre.
 
qd j'essaye de faire une affectation la plupart du temps il n'évalue plus mon expression et je me retrouve avec un 0.
j'ai vu qu'on pouvait faire des eval d'eval mais je ne m'en suis pas sorti
 
merci de ton aide


 
 
Dans ce cas :
 

Code :
  1. #!/bin/bash
  2. for (( i=1 ; i<= $# ; i++ )) ; do
  3. eval IP$i=\$$i
  4. echo "direct" $i
  5. echo "indirect" \$$i
  6. echo $IP
  7. echo $IP1
  8. done
  9. echo "---------------------"
  10. for (( i=1 ; i<= $# ; i++ )) ; do
  11. eval x=$IP\$$i
  12. echo @IP: ${x} Longueur ${#x}
  13. done


n°1362413
erlend
Posté le 09-05-2006 à 14:37:53  profilanswer
 

merci  
ca à l'air de fonctionner
par contre fais attention skyofdiamonds !
en utilisant les balises 'codes' tu perds les anti-slash
 
Code :
 
for (( i=1 ; i<= $# ; i++ )) ; do
 eval x=$IP\$$i
 echo @IP: ${x} Longueur ${#x}
done
 
je vais travaillé sur ca merci
 
pourrais tu me donner l'origine de ${x} et de ${#x} ??
je peux les utiliser comment ?

Message cité 1 fois
Message édité par erlend le 09-05-2006 à 14:39:19
n°1362888
Sve@r
Posté le 09-05-2006 à 23:01:40  profilanswer
 

erlend a écrit :

pourrais tu me donner l'origine de ${x} et de ${#x} ??
je peux les utiliser comment ?


 
${x} sert à isoler le nom de la variable de son environnement chaque fois qu'il peut y avoir ambiguité
ex:
prix=10
echo $prixF   => le shell croit que tu parles de la variable "prixF" alors que tu veux "prix" suivi de "F" => echo ${prix}F
 
${#x} est une extension bash et ne fait donc pas partie du Bourne Shell. Elle signifie "longueur de la chaîne contenue dans x".
ex: lg=${#x}
 
Si t'as que le Bourne Shell à ta disposition, tu peux passer par "expr" pour obtenir le même résultat
ex: lg=`expr $x : '.*'`


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  récupérer et réutiliser les paramètres dans un for

 

Sujets relatifs
Oracle 8.1 EXP insensible aux paramètresgestion de donnée récupérer sur d'autre classeur
Recuperer un fichier depuis un serveur ???(DotNet) récupérer handle textbox
[php]recuperer le nom d'une variableRécupérer valeur bouton radio + lien img
GetParameter: récupérer plusieurs valeurs venant de la meme variablerécupérer des chiffres dans une expression (vbaexcel)
[DELPHI] récupérer les infos d'un ac3.[C / Unix] Recuperer un evenement clavier en mode console
Plus de sujets relatifs à : récupérer et réutiliser les paramètres dans un for


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