Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
petit pb de debutant commande shell...
Envoyé par: yadonel

Bonjour,

la je dois faire un dev pour ce soir en bourne shell,
je veux faire une lecture de ligne de n aarguments et recupéré les (n - 2) derniere valeurs, j'ai pensé que l'utilisation d'un read serait une bonne idée !

J'ai trouvé sur le net cet exemple suivant :

echo "Bonjour les amis" | read ligne ; echo $ligne

Et ca ne marche pas !!! donc cela marche encoer moins dans mon cas quelqu'un saurait pourquoi ?

Merci

Poste le Thursday 18 December 2003 12:10:39
Répondre     Citer    
Re: mon script pour plus de precisions
Envoyé par: yadonel

Voila le code de mon script :
commande fichier.conf nomVariable
**********FichierConf***********
MaVariable : 3 4 5
....
**********************************
$ commande FichierConf MaVariable
>3 4 5

*******************************
Voila ce que je voudrais faire et voici mon script : (qui me renvoie kk chsoe mais ne contenant rien :-\)

#! /bin/sh

cfgfile=$1
varname=$2
if test -f $1 && test -r $1
then
if grep -E -q $2' : ' $1
then
#on cherche la ligne contenant la variable
while read ligne
do
#echo $ligne
if (echo $ligne | grep -q $2)
then
#si on trouve la ligne contenant la variable on récupére sa valeur
echo $ligne | read n sep val
echo $val #affichage du resultat
fi
done < $1
else
exit 2
fi
else
exit 1
fi

Merci d'avance

Poste le Thursday 18 December 2003 13:00:37
Répondre     Citer    
Re: petit pb de debutant commande shell...
Envoyé par: alveric

La commande
$ echo "Bonjour les amis" | read ligne ; echo $ligne
Le problème, c'est que le ";" est prioritaire par rapport à "|". Le "echo | read" est exécuté, mais la variable $ligne n'est modifiée que dans le processus lié au pipe. Une fois terminé, "echo $ligne" ne peut donc retrouver la valeur de $ligne.

Pour corriger ça:
$ echo "Bonjour les amis" | { read ligne ; echo $ligne ;}

Poste le Thursday 18 December 2003 13:36:40
Répondre     Citer    
Re: petit pb de debutant commande shell...
Envoyé par: yadonel

Ok ! Merci !
Ca marche :-)

Poste le Thursday 18 December 2003 13:55:17
Répondre     Citer    
Re: petit pb de debutant commande shell...
Envoyé par: Svear

> echo "Bonjour les amis" | { read ligne ; echo $ligne ;}

Hum... et si on essayait
ligne="Bonjour les amis"; echo $ligne"
???

En ce qui concerne ton problème de "commande FichierConf MaVariable"; j'ai compris que tu voulais afficher les valeurs situées après les ":" de la ligne contenant "MaVariable". Si c'est bien cela, je te propose le petit script suivant:
----------------------------------------------------------------------------------------------
#!/bin/sh

ligne=`grep "$2" $1`
# Cette instruction extrait la chaîne passée en second argument
# du fichier passé en premier argument et la stocke
# dans une variable "ligne"
# Si tu es certain que la variable se trouve en début de ligne, tu peux
# mettre grep "^$2" (le chapeau ne recherche que les débuts de lignes)

test -n "$ligne" && echo $ligne |cut -f2 -d:
# Si la variable "$ligne" n'est pas vide (donc que la chaine "$2" a été trouvée)
# Alors je coupe cette variable sur le second champ en utilisant ":" comme séparateur de champ
----------------------------------------------------------------------------------------------
C'est fini - Enlève les commentaires et tout ton script tient en 3 lignes:

#!/bin/sh
ligne=`grep "$2" $1`
test -n "$ligne" && echo $ligne |cut -f2 -d:

Poste le Friday 19 December 2003 01:59:13
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
petit pb de debutant commande shell...
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons