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

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  encore un pb de script shell....

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

encore un pb de script shell....

n°464805
Solt
Posté le 27-04-2004 à 11:45:53  profilanswer
 

voilà, (toujours en ksh mais je veux bien faire du sh, du bash ou autre)
 
En fait voilà ce que je fais:
 

Code :
  1. master="serveur_toto"
  2. slave="serveur_tutu"
  3. case $1 in
  4.         master) HOSTNAME=$master
  5.         slave) HOSTNAME=$slave


 
et moi j'aurais aimé faire sans case avec kkchose du genre:
HOSTNAME=${$1}
 
sauf que ca marche pas comme ca...
bon, en plus j'ai beaucoup de variables a traiter de cette facon, et avoir la solution a ca alégerait beaucoup mon script...
 
merci merci, a cui qui trouve!! :)

mood
Publicité
Posté le 27-04-2004 à 11:45:53  profilanswer
 

n°464870
yannigperr
Posté le 27-04-2004 à 13:11:14  profilanswer
 

Je me lance ... Voici le résultat :
 
master=titi
slave=tutu
arg1=master
eval HOSTNAME=$`echo $arg1`
echo $HOSTNAME
 
Apparemment, ça fonctionne.

n°464904
Solt
Posté le 27-04-2004 à 14:07:18  profilanswer
 

chapeau bas!!!! pourtant j'avais essayé avec des `` mais pas avec eval :(
 
v voir en détails a quoi ca sert...
 
merci bien!!

n°464996
Solt
Posté le 27-04-2004 à 15:37:24  profilanswer
 

alors... encore plus vicieux... (et encore un copu j'y arrive pas tout seul...) mais bon là, c'est plus que ca m'énerve de pas arriver a la faire comme je veux!
 
I=0
while [ "X${eval $`echo "ETH_${I}_0"`}" != "X" ]; do
        eval ETH_`echo $I`_0=$`echo "${A}_ETH_`echo $I`_0"`
        echo "ETH_`echo $I`_0=${ETH_`echo $I`_0}"
        ...
        I++
done
 
en gros, j'ai des variables MASTER_ETH_x_y et SLAVE_ETH_x_y (où x et y peuvent varier) et je voudrais, une fois que je sais si j'ai a faire a master ou a slave tout recopier dans des variables ETH_x_y
 
bon là y'a que le x, mais déjà ca marche pas... :)
 
bon, sinon, je ferais sans, mais ca sera largement moins beau et moins extensible...
 
alors yannigperr t'a une idée de comment faire ce truc tordu?
(bon les autres aussi ont le droit de répondre, mais tu m'a l'air de bien tater en shell...)
 

n°465030
Solt
Posté le 27-04-2004 à 16:08:39  profilanswer
 

yes ca marche!!!!
 
I=1
eval `echo "ETH_${I}_0"`=$`echo "${A}_ETH_${I}_0"`
echo "MASTER_ETH_1_0=$MASTER_ETH_1_0"
echo "ETH_1_0=$ETH_1_0"
 

n°465045
Solt
Posté le 27-04-2004 à 16:24:35  profilanswer
 

rah, sauf que pour insérer ca dans un while (ou dans un echo)... le eval dans le while... ?!?!?!

n°465089
Solt
Posté le 27-04-2004 à 17:08:49  profilanswer
 

bon, je patoge...
 
si kkn a une idée de pourquoi ca:
I=1
echo "`eval `"ETH_${I}_0="``${`eval `"ETH_${I}_0"``}"
 
ne marche pas...
sachant que le but est d'avoir un:
echo "ETH_1_0=${ETH_1_0}"
 
???

n°465409
yannigperr
Posté le 28-04-2004 à 08:55:15  profilanswer
 

Euh, tu pourrais pas utiliser un tableau plutôt ?
C'est pratique un tableau ... La seule restriction est que tu ne peux utiliser un tableau d'une dimension. Mais à la limite, tu peux utiliser une asture de ce genre :
 
let index=i+(j*10) # pour un tableau de largeur 10
tab[$index]="mon bordel"
 
intégrer dans un truc du genre :
 
for i in 1 2 3
do
  for j in 1 2
  do
    let index=i+(j*10)
    tab[index]="mon bordel"
  done
done
 
Le parcours d'un tableau :
i=0
for elt in ${tab[ *]}
do
  let i=$i+1
  echo "$i : $elt"
done
 
Pour info, echo "`eval `"ETH_${I}_0="``${`eval `"ETH_${I}_0"``}" ne peut fonctionner puisque tu ne peux pas imbriquer plusieurs '``' ...


Message édité par yannigperr le 28-04-2004 à 08:55:34
n°465424
Solt
Posté le 28-04-2004 à 09:46:07  profilanswer
 

ok, merci pour l'info a propos de l'imbrication des `` ceci explique beaucoup de choses quand au comportement non désiré de mon script... :)
 
je vais voir pour le tableai, je crois quand même que je vais encore batailler un petit peu... :)

n°465426
Solt
Posté le 28-04-2004 à 09:46:32  profilanswer
 

ok, merci pour l'info a propos de l'imbrication des `` ceci explique beaucoup de choses quand au comportement non désiré de mon script... :)
 
je vais voir pour le tableai, je crois quand même que je vais encore batailler un petit peu... :)

mood
Publicité
Posté le 28-04-2004 à 09:46:32  profilanswer
 

n°465431
Solt
Posté le 28-04-2004 à 09:58:04  profilanswer
 

Bon, je crois que je vais laisser tomber...
 
domage car là:
 

Code :
  1. I=1
  2. J=0
  3. while [ "`eval "X\${ETH_${I}_${J}}"`" != "X" ]; do
  4.         eval `echo "ETH_${I}_${J}"`=$`echo "${A}_ETH_${I}_${J}"`
  5.         eval echo "ETH_${I}_${J}=\$ETH_${I}_${J}"
  6.         (( I=I+1 ))
  7.         if [ I -ge 10 ]; then
  8.                 exit 3
  9.         fi
  10. done


 
je pense que je suis vraiment pas loin... le eval marche, le echo aussi, juste la condition du while qui merdoie encore un peu....

n°465457
philou_a7
\_o< coin ! >o_/
Posté le 28-04-2004 à 10:44:49  profilanswer
 

tu devrais te documenter sur perl :D ca t'aiderait probablement ;)

n°465529
Solt
Posté le 28-04-2004 à 12:06:00  profilanswer
 

oui, je pense en effet que ca serait une bonne chose...

n°465601
yannigperr
Posté le 28-04-2004 à 13:16:02  profilanswer
 

Pourquoi tu fais un while ?
Fait plutôt une boucle :
for I in 1 2 3 4 5 6 7 8 9 10
do
   ...
done

n°465602
yannigperr
Posté le 28-04-2004 à 13:16:46  profilanswer
 

Pour ton While, remplace  
while [ "`eval "X\${ETH_${I}_${J}}"`" != "X" ]; do
 
par  
while [ "`eval "echo X\${ETH_${I}_${J}}"`" != "X" ]; do

n°465834
Solt
Posté le 28-04-2004 à 17:40:43  profilanswer
 

ok merci...
 
pour le for, c'est parce que je voulais ne pas avoir a imposer le nombre de groupes en fait.
 
je vais regarder ce que t'a fait pour le while, merci beaucoup, mais déjà, je viens d'alléger gravement le bidule:
 
Avant:
eval `echo "ETH_${I}_0"`=$`echo "${A}_ETH_${I}_0"`
 
Maintenant:
eval ETH_${I}_0="\$${A}_ETH_${I}_0"
 
en + c'est vachement plus compréhensible...

n°466364
Solt
Posté le 29-04-2004 à 10:17:10  profilanswer
 

yes, de mieux en mieux:
 

Code :
  1. I=1
  2.         while [ I -le $NB_BONDS ]; do
  3.                 eval echo "DEVICE=\$VETH_${I}" \> \${IFCFGPATH}\${VETH_${I}}
  4.                 eval echo "ONBOOT=yes" \>\> \${IFCFGPATH}\${VETH_${I}}
  5.                 eval echo "IPADDR=\$IP${I}" \>\> \${IFCFGPATH}\${VETH_${I}}
  6.                 eval echo "NETMASK=\$MASK${I}" \>\> \${IFCFGPATH}\${VETH_${I}}
  7.                 if [ `eval "X\${GATEWAY${I}}"` != "X" ]; then
  8.                         eval echo "GATEWAY=\$GATEWAY${I}" \>\> \${IFCFGPATH}\${VETH_${I}}
  9.                 fi
  10.                 (( I=I+1 ))
  11.         done

n°466427
yannigperr
Posté le 29-04-2004 à 11:29:01  profilanswer
 

je préfére la forme :
let I=$I+1
 
Mais c'est totalement personnel.

n°466473
Solt
Posté le 29-04-2004 à 12:15:57  profilanswer
 

d'accord, moi je veux bien :)
 
je me servirais de let comme ca :)
 
bon, sinon, en fait ca marche pas dans le if... ni dans le while, même avec la syntaxe que tu proposais... domage

n°466490
Solt
Posté le 29-04-2004 à 12:41:55  profilanswer
 

je crois que mes pb de tests -n et -z viennent de ksh, ca a l'air de marcher en bash... mais parcontre y'a des trucs qui ont l'air de changer au niveau des déclarations de variables...

n°467456
Solt
Posté le 30-04-2004 à 13:05:19  profilanswer
 

en fait (si jamais ca interesse kkn...) j'ai trouvé (je pense) d'où viennent mes pb de tests qui ne marchent pas, c'est depuis que je travaille sur les machines en session SSH que les tests de valeurs nulles ne fonctionnene plus!!!
 
et pour les evals dans les if et dans les while, comme j'y arivais pas, bein je les ai déportés avant les tests, en utilisant une variable tout simplement...
 
en tt cas, now c'est bien cool, ca fait des scripts trés adaptatifs aux nombres de variables...
 
et aussi, si ca interesse, les grandes séries de / pour de gros morceaux de lignes non interprétées par le eval peuvent être mises entre '' ce qui augmente quand même la lisibiulité, genre: \>\> \${IFCFGPATH} --> '>> ${IFCFGPATH}'
 
bref, voilà

mood
Publicité
Posté le   profilanswer
 


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

  encore un pb de script shell....

 

Sujets relatifs
script shell, pb de testsScript en C Shell ---> besoin d'aide
[shell script] boucle while et taille de fichier[shell] script appellé par un pipe, stocker la donnée d'entrée?
[résolu][SHELL] Aide pour un script de découpage de fichierscript shell pour la suppression de virtualhost dans httpd.conf ??
Récupèrer la valeur passée dans le pipe avec un script shell[SCRIPT SHELL]comptage du nb d'occurences d'un caractère dans un file
Utiliser Lynx - links - W3m dans un script shell[shell] Activer la completion sur un script perso ?
Plus de sujets relatifs à : encore un pb de script shell....


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