Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
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 24/02/2010, 19h43   #1
Futur Membre du Club
 
Inscription : septembre 2006
Messages : 86
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 86
Points : 17
Points : 17
Par défaut recuperer une variable dans shell

Bonjour,

Voila mon problem:

Dans fichier de configuration j'ai des parametre comme suit:

OID1="xxxxxxxxxx"
OID2="xxxxxxxxxx"

et je pourrais avoir plusieurs..

en plus j'ai un autre parametre:
NB_OID=2 // le NB_OID est le nombre de OID dans mon fichier de conf.

Dans mon script shell je fait ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
source param.cfg
.
.
.
VAR_STRING=""
COUNT=0
while [ "$COUNT" -lt "$NB_OID" ]
do
   COUNT=$(($COUNT+1))
 
   if [ -n "$(OID${COUNT})" ]
   then
     $VAR_STRING="$VAR_STRING $OID$COUNT" // le but c pour des arguments en ligne pour une commande, et vu que je ne connais pas le nombre de OID dans le fichier de conf, j'essaye de les concatiner
   fi
done
le but de ceci $(OID${COUNT}) est d'avoir les valeurs de mes parametre dans le fichier de conf (OID1, OID2,.....).

Le problem:
Le OID${COUNT} renvoit bien OID1 ou OID2, par contre je n'arrive pas a avoir les valeurs de OID1 et OID2 (dans mon cas) ni les concatiner !!

Merci pour votre aide

Kass
kass28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 20h00   #2
Membre confirmé
 
Avatar de SYL666
 
Cédric
Inscription : novembre 2003
Messages : 308
Détails du profil
Informations personnelles :
Nom : Cédric

Informations forums :
Inscription : novembre 2003
Messages : 308
Points : 296
Points : 296
Salut,

Tu peux utiliser les tableau en bash aussi :

Une version identique de ton script, mais en utilisant une boucle for ainsi que les tableaux :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
OID[1]="xxxx"
OID[2]="yyyyyyyy"
NB_OID=2
VAR_STRING=""
for I in $(seq 1 $NB_OID)
do
        if [ -n $OID[$I] ]
        then
                VAR_STRING="$VAR_STRING ${OID[$I]}"
        fi
done
echo $VAR_STRING
Resultat :
Code :
1
2
# ./test.sh 
xxxx yyyyyyyy
__________________
The Big Bang theory : In the beginning there was nothing, and it exploded. (Terry Pratchett)

IT Quote : "Unix is user-friendly. It's just very selective about who its friends are."
SYL666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 20h23   #3
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Heu... c'est pour faire ça?
Code :
awk 'BEGIN {FS="="; ORS=" "} {print $2}' param.cfg
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2010, 01h07   #4
Futur Membre du Club
 
Inscription : septembre 2006
Messages : 86
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 86
Points : 17
Points : 17
Citation:
Envoyé par SYL666 Voir le message
Salut,

Tu peux utiliser les tableau en bash aussi :

Une version identique de ton script, mais en utilisant une boucle for ainsi que les tableaux :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
OID[1]="xxxx"
OID[2]="yyyyyyyy"
NB_OID=2
VAR_STRING=""
for I in $(seq 1 $NB_OID)
do
        if [ -n $OID[$I] ]
        then
                VAR_STRING="$VAR_STRING ${OID[$I]}"
        fi
done
echo $VAR_STRING
Resultat :
Code :
1
2
# ./test.sh 
xxxx yyyyyyyy
Merci pour ta reponse.
Mais si je declare un tableau comme vous dites. La declaration:
OID[1]="xxxx"
OID[2]="yyyyyyyy"
NB_OID=2
seront dans un fichier param.cfg.

Et je source ce fichier dans mon script. Est ce que le fait de sourcer le fichier je peux acceder a mon tableau OID ?
kass28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2010, 01h15   #5
Futur Membre du Club
 
Inscription : septembre 2006
Messages : 86
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 86
Points : 17
Points : 17
Citation:
Envoyé par jmelyn Voir le message
Heu... c'est pour faire ça?
Code :
awk 'BEGIN {FS="="; ORS=" "} {print $2}' param.cfg
Dans param.cfg , y a pas mal des choses ( ya pas que les OIDs).

au fait si j'ai un fichier param.cfg dont j'ai la declation suivant:
IP=1.1.1.1
PORT=162
type["INTEGER"] = I
type["STRING"] = S
SENDER_OID["KST"] = "1.3.4.5.6"
SENDER_OID["KNM"] = "1.3.4.5.7.8"

et a part j'ai un script dont j'utilise awk, si dans mon script awk, je fais ce qui suit
Code :
1
2
3
4
5
6
7
8
 
BEGIN {
 system("source ./param.cfg") // pour faire en sorte comme les declarations sont la et si je fais ca c'est parceque les parametres ds le fichier param change 
}
{
 
...
}
mais awk ne voit pas les declarations. Est ce que c'est possible de faire ca ?
kass28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2010, 11h16   #6
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
D'abord, fais un effort pour t'exprimer clairement: Il faut vraiment déchiffrer tes messages. As-tu relu ton commentaire? Le voici: "pour faire en sorte comme les declarations sont la et si je fais ca c'est parceque les parametres ds le fichier param change".

Pour une solution:
Code :
awk 'BEGIN {FS="="; ORS=" "} /^OID/ {print $2}' param.cfg
Et puis il est normal que awk ne voit pas les variables d'environnement.
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 14h50.


 
 
 
 
Partenaires

Hébergement Web