récupérer et réutiliser les paramètres dans un for - Shell/Batch - Programmation
Marsh Posté le 19-04-2006 à 01:05:33
#!/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)
#
Marsh Posté le 19-04-2006 à 11:26:18
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
Marsh Posté le 19-04-2006 à 13:20:09
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` |
Marsh Posté le 19-04-2006 à 22:18:06
erlend a écrit : Je suis d'accord avec toi.
|
Dans ce cas :
Code :
|
Marsh Posté le 09-05-2006 à 14:37:53
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 ?
Marsh Posté le 09-05-2006 à 23:01:40
erlend a écrit : pourrais tu me donner l'origine de ${x} et de ${#x} ?? |
${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 : '.*'`
Marsh Posté le 18-04-2006 à 14:22:49
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