rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Shell script: lire une chaine de caractere da

Posté par kloorane, le lundi 30 avril 2007 à 13:30:47
Bjr à tous,
Je sis débutant en shell script.
En fait je veux créer un programme en korn shell qui va me permettre d'aller lire une chaine de caractère dans un fichier et me retourner sa valeur.
y a t il une commande qui pemret de faire ça?
mERCI D AVANCE
Configuration: Windows XP
Internet Explorer 7.0
Répondre à kloorane  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le lundi 30 avril 2007 à 13:33:12
Salut,

Normalement avec "grep" (man grep) ça doit le faire, mais il faut être plus précis sur ce que tu veux vraiment faire (donnes-nous un exemple concret).

;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kloorane, le lundi 30 avril 2007 à 13:42:27
je vais être un peu plus précis.
je veux créer un shell avec la condition suivante:
Tant que
je ne trouve pas la chîne de caractère "toto" dans le fichier "test"qui se trouve dans /app/shell
ne rien faire
Répondre à kloorane

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le lundi 30 avril 2007 à 14:01:10
Re-

Ce que tu veux faire n'est pas très orthodoxe dans le sens où il vaudrait mieux programmer un truc dans le genre :

Tant que "je trouve la chaîne "toto" dans "/app/shell"; faire bla bla bla...

ou alors :

Tant que "je ne trouve pas la chaîne "toto" dans "/app/shell"; faire bla bla bla...

Mais bon voici quand même ce que tu veux (enfin presque) :
grep "toto" /app/shell ; while [ "$?" != 0 ]; do echo "Je ne fais rien"; done
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kloorane, le lundi 30 avril 2007 à 14:24:59
merci pour ta réponse.
En fait ce que je veux faire c'est:
exécuter une commande (par ex ls) qu'une fois j'aurai trouvé la chaine de caractère "toto" ds /app...
a ton avis...
Répondre à kloorane

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le lundi 30 avril 2007 à 14:34:22
grep "toto" /app/shell/test >/dev/null ; if [ "$?" = 0 ]; then ls ; fi ; done
PS. Dans mon message précédent, j'avais oublié de mettre le fichier "test" dans 'grep "toto" /app/shell/test' Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kloorane, le lundi 30 avril 2007 à 14:41:39
au risque d'être chiant, à quoi sert >/dev/null
Merci pour ton aide
Répondre à kloorane

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le lundi 30 avril 2007 à 14:46:41
Ça redirige ce qui est sensé être envoyé sur la sortie standard (dans notre cas stdout=l'écran), vers une sorte de poubelle virtuelle sans fond. En gros tout ce que tu ne veux pas voir apparaître sur ton écran (ou dans un fichier le cas échéant, tout dépend de la redirection), tu l'envoies vers "/dev/null".

Sans cette directive, en sus du listage de ton répertoire, tu aurais auparavant l'affichage de la ligne contenant "toto".
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kloorane, le lundi 30 avril 2007 à 17:15:27
j ai l'erreur suivante qui apparaît qd j execute mon script
"syntax error at line 59 : `done' unexpected"
Voila ce que je fais:

grep "Server started in RUNNING mode" /app/bea/wlsa >/dev/null
if [ "$?" = 0 ]
then

trace "Demarrage du serveur"
executer_remote_script $APPLI_SRV $EXPLOIT sys_managesrv.ksh start
retour=$?
if [ $retour -eq 3 ]
then
exit 3;
fi

trace "Fin de Lancement de l'application "

fi
done

En fair, je veux que mon script consulte le fichier wlsa, et qu'il n'execute ce qui vient après le then qu'une fois il y aura la chaine "Server started in RUNNING mode" écrite ds le fichier wlsa.

Help!
Répondre à kloorane

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le lundi 30 avril 2007 à 17:25:00
Affiche ton script en entier, sinon on patauge...

Est-ce qu'il existe un "do" en amont de ton script ? (du fait de : "syntax error at line 59 : `done' unexpected" )
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kloorane, le lundi 30 avril 2007 à 17:36:10
non j ai pas de do en amont
Répondre à kloorane

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le lundi 30 avril 2007 à 17:38:39
Supprime le "done" alors ;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kloorane, le lundi 30 avril 2007 à 17:55:35
ça a l'air de marcher
thanks a lot
Répondre à kloorane

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le lundi 30 avril 2007 à 18:00:33
De rien ;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kloorane, le lundi 30 avril 2007 à 20:49:08
Slt,
je sollicite encore ton savoir :)
Cette fois je faire une boucle qui permet de chercher une chaine:

grep "Server started in RUNNING mode" /app/wlsa.log >/dev/null

while [ $? != 0 ]
do
grep "Server started in RUNNING mode" /app/wlsa.log >/dev/null
sleep 10
trace "toujours dans la boucle"
done

Normalement ça doit boucler tant que je n'ai pas ma chaine de caractère ds le fichier.
Ce qui n'est pa le cas.
Est ce que j'ai un prob de syntaxe?
Répondre à kloorane

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le lundi 30 avril 2007 à 22:51:18
while [ "$retval" != 0 ]
do
grep "Server started in RUNNING mode" /app/wlsa.log >/dev/null
retval=$?
sleep 10
trace "toujours dans la boucle"
done 
;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kloorane, le mardi 1 mai 2007 à 14:47:08
oui mais la var retval a quelle valeur au début, ne faut il pas l'initialiser au départ?
Répondre à kloorane

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le mardi 1 mai 2007 à 17:51:49
Aucune, donc différente de zéro, et de part là même ça passe ;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kloorane, le mardi 1 mai 2007 à 19:11:58
est ce qu'on est sur à 100% qu'elle ne peut jamais prendre la valeur 0 au départ?
Répondre à kloorane

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le mardi 1 mai 2007 à 19:18:40
Dans ce cas l'écrire comme ça :
while [ "${retval:=1}" != 0 ]
ou encore comme ça :
while [ "${retval:~1}" != 0 ]
Voir sujet dans la FAQ : le remplacement de variables en shell bash

;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

20


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kloorane, le mercredi 2 mai 2007 à 11:56:05
Mais dans ce cas retval aura toujours la valeur 1, la boucle sera infini.
Or moi ce que je veux c'est:

1- Faire le grep "Server started in RUNNING mode" /app/wlsa.log >/dev/null
2- Récuperer le resultat du grep
3-Si cette valeur est différente de 0 refaire le grep tant que la valeur est différente de 0.

A un moment la valeur du grep sera égale à 0 et là il faudra sortir de la boucle.

J'espere que c'est plus clair.
Merci pour ton aide précisese.
Répondre à kloorane

21


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le mercredi 2 mai 2007 à 13:54:03
Mais dans ce cas retval aura toujours la valeur 1, la boucle sera infini.
Non, la valeur "1" n'est attribuée que si la variable n'est pas définie, ce qui est le cas avant la 1ère boucle, mais pas dans les autres boucles.

Quoi qu'il en soit, la 1ère solution marchait aussi, la variable renvoyant une valeur vide différente de "0"...

Voilà un exemple :
jp@MDK:~/tmpfs ssh$ cat kloorane # fichier de référence

Mais dans ce cas retval aura toujours la valeur 1, la boucle sera infini.
Or moi ce que je veux c'est:

1- Faire le grep "Server started in RUNNING mode" /app/wlsa.log >/dev/null
2- Récuperer le resultat du grep
3-Si cette valeur est différente de 0 refaire le grep tant que la valeur est différente de 0.

A un moment la valeur du grep sera égale à 0 et là il faudra sortir de la boucle.

J'espere que c'est plus clair.
Merci pour ton aide précisese

jp@MDK:~/tmpfs ssh$ cat foo.sh # le script
#! /bin/bash

unset retval # on efface la variable


while [ "$retval" != "0" ]
do
grep "jipicy" kloorane # on cherche "jipicy" dans le fichier de référence
retval=$?
sleep 3 # permettra d'introduire le mot "jipicy" en cours d'exécution
echo "Toujours dans la boucle"
done

echo
echo "La valeur a été trouvée"
echo "Arrêt du script"

exit 0

jp@MDK:~/tmpfs ssh$ sh foo.sh # lancement du script

Toujours dans la boucle # Pas de valeur "jipicy" de trouver
Toujours dans la boucle # idem
Toujours dans la boucle # idem
Toujours dans la boucle # La valeur est envoyée
jipicy                                   # la valeur est trouvée
Toujours dans la boucle # la boucle s'arrêtera après ça 

La valeur a été trouvée
Arrêt du script

jp@MDK:~/tmpfs ssh$
La valeur a été envoyée pendant l'exécution du script sous la forme :
echo "jipicy" >> kloorane
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

22


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kloorane, le mercredi 2 mai 2007 à 15:13:01
J'ai essayé avec les 2 méthodes:
while [ "$retval" != "0" ]
et while [ "${retval:=1}" != 0 ]
Ca marche bien la 1ere fois ms qd je reteste une 2ème fois ça marche pas!
On dirait que retval garde l'ancienne valeur.
As tu une idée?
Répondre à kloorane

23


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le mercredi 2 mai 2007 à 15:38:11
Lance ton script en mode débogage ("set -xv") et vois ce que ça donne...

"set +xv" pour revenir au mode normal.
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

24


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sabir, le mercredi 21 mai 2008 à 13:50:07
bonjour,


j'ai la ligne suivante :

export HORCMINST="29"
SVP, comment puis-je afficher le chiffre 29 seul.?
awk ??

Merci
Répondre à sabir

25


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le mercredi 21 mai 2008 à 13:59:24
Salut,
 echo 'export HORCMINST="29"' | grep -o '[0-9]\+'
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.
Répondre à jipicy

26


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 sambooor, le jeudi 22 mai 2008 à 19:56:06
salut
merci pour ta reponse, ce ke tu ma di ca marche bien. mais jai deja trouver une autre solution, en fait, le chiffre entre guillemet change, ex export HORCMINST="1033". demain je tenvoi la solution paseke mnt chui chez moi (pas a mon bureau)

salutation
Répondre à sambooor
Logiciels pertinents trouvés dans les téléchargements
Télécharger Notepad++ 5.0.2Notepad++ - Notepad++ est un editeur de code source qui supporte plusieurs langages. Il s'agit d'un logiciel libre performant et...Catégorie: Développement
Licence: Open Source
Télécharger Process Explorer 11.20Process Explorer - Process Explorer est un gestionnaire des tâches évolué. Il permet de voir de nombreuses informations: savoir quel...Catégorie: Diagnostic
Licence: Freeware/gratuit
Télécharger CDCheck  3.1.13.0CDCheck - Récupérez vos fichiers endommagèes d'un cd ou DVD grâce à CDCheck... CDCheck est l'utilité de la prévention, de détection...Catégorie: Gestion de fichiers
Licence: Shareware
Télécharger XPassgen    0.5XPassgen - Pour protéger vos documents de toutes intrusions en utilisant un mot de passe, faites le bien. XpassGen est un générateur...Catégorie: Sécurité
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « shell script: lire une chaine de caractere da »