Shell script: lire une chaine de caractere da

kloorane -  
 sambooor -
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

5 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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'
    0
    1. kloorane
       
      au risque d'être chiant, à quoi sert >/dev/null
      Merci pour ton aide
      0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Ç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".
    0
    1. kloorane
       
      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!
      0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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" )
    0
    1. kloorane
       
      non j ai pas de do en amont
      0
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Supprime le "done" alors ;-))
      0
    3. kloorane > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      ça a l'air de marcher
      thanks a lot
      0
    4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      De rien ;-))
      0
    5. kloorane > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      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?
      0
  4. sabir
     
    bonjour,

    j'ai la ligne suivante :

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

    Merci
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut,
       echo 'export HORCMINST="29"' | grep -o '[0-9]\+'
      ;-))
      0
      1. sambooor > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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).

    ;-))
    -1
    1. kloorane
       
      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
      0
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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
      ;-))
      0
      1. kloorane > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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...
        0