Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/02/2012, 12h27   #1
Invité de passage
 
Homme Olivier C
Inscription : février 2012
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Olivier C
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2012
Messages : 3
Points : 0
Points : 0
Par défaut sh - Traitement de n variables nommées avec une constante.

Bonjour à tous,

Je vous expose mon problème;
Dans un script sh je récupère 450 variables nommées comme suit :

lgmt001=foo
lgmt002=bar
lgmt003=john
lgmt004=doe
lgmt005=thony
lgmt006=luke
lgmtxxx
lgmt450=steven

Je souhaite effectuer un traitement "y" sur le contenu de chaque.

Avec cette méthode le comportement est bon, mais avec 450 variable ca commence à faire long
Code :
1
2
3
for i in "$lgmt001" "$lgmt002" "$lgmt003" "$lgmt004" "$lgmt005" "$lgmt006" "$lgmtxxx" ....... "$lgmt450"; 
do echo "$i"; 
done


vu que dans chaque variable la chaine "lgmt" est une constante, Je préférerai faire un truc du style :
Code :
1
2
3
for i in $(seq -w 1 450); 
do echo ${'lgmt'${i}};
done
Mon problème est là; "${'lgmt'${i}}" n'est pas interprété comme je le souhaite.

Avez-vous une idée?

Merci
Tivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 12h34   #2
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 944
Points : 4 944
Et avec cet exemple :
Code :
1
2
3
for i in $(seq -w 1 450); 
do touch `echo lgmt$i` ;
done
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 06/02/2012, 12h43   #3
Invité de passage
 
Homme Olivier C
Inscription : février 2012
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Olivier C
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2012
Messages : 3
Points : 0
Points : 0
Merci pour ta réponse,

Dans ce cas non plus ca ne fonctionne pas,
le résultat de ton code est "touch lgmt001" (création d'un fichier nommé lgmt001), je cherche à récupérer le contenu de la variable pas son nom.

Merci.
Tivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 13h52   #4
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 073
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 073
Points : 4 165
Points : 4 165
Bonjour,

Citation:
Dans un script sh je récupère 450 variables
ça devrait ne jamais arriver. d'ailleurs, comment en arrives-tu là ?

Pourquoi ne pas effectuer le traitement à mesure de leur apparition ?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 14h05   #5
Invité de passage
 
Homme Olivier C
Inscription : février 2012
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Olivier C
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2012
Messages : 3
Points : 0
Points : 0
Bonjour,

Voici comment j'en arrive là :
Les variable sont récupérées en post depuis un une page cgi qui contient 450 inputs identifiés lgmtxxx.

le traitement doit donc être effectué par une seconde page cgi qui récupère les variable, pas de problème jusque là.

Je cherche simplement un bout de code un peut plus propre que celui que je propose en 1er lieu.

J'espère être clair.

merci
Tivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 18h26   #6
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 944
Points : 4 944
Je voulais arriver à quelque chose !

Code :
1
2
3
4
5
6
7
8
9
10
11
for i in $(seq -w 1 450); 
do
echo 'lgmt'$i=$(( i*2 )) >> tmp.sh;
done
for i in $(seq -w 1 450); 
do
echo 'echo $lgmt'$i >> tmp.sh;
done
sh tmp.sh
cat tmp.sh
rm -f tmp.sh
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 07/02/2012, 10h54   #7
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Par défaut je crois que je l'ai ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$ V01=toto
$ V02=tata
$ for n in 01 02
> do
> echo \$V$n
> eval echo \$V$n
> done
$V01
toto
$V02
tata
$
Sinon tu peux peut etre recuperer tes variables dans un tableau ou par position si elles sont en parametre de ton script ...
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h30.


 
 
 
 
Partenaires

Hébergement Web