IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

le résultat du 'find' dans une variable


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 19
    Points : 5
    Points
    5
    Par défaut le résultat du 'find' dans une variable
    Bonjour,
    J'essaye de récupérer le résultat du find dans une vairable mais cette dernière reste vide.
    voici le code de mon shell script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    check=1
    while [ $check!='server' ]
    do
    check=&(find /home/server/prd01/log/serverLog.txt | xargs grep '*** Ready!' | cut -d ":" -f1 | uniq)
    echo 'toto est : '$check
    done
    le résultat du script est:
    server
    toto est : 1
    la première valeur du résultat est celle de la commande 'find'.
    Mon but est de la récupérer dans une variable.
    Avez-vous une idée?
    Merci

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 471
    Points
    19 471
    Par défaut
    euh... y a au moins un problème, là !

    Tu cherches un fichier dont tu connais la location ?

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Et c'est $(, pas &(

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par matafan Voir le message
    Et c'est $(, pas &(
    Oui effectivement, Merci, je n'avais pas vu ma faute de frappe.
    Par contre, maintenant le code n'arrive pas à sortir de la boucle while.

    la variable check prend bien la valeur server mais la boucle while ne s'arrête pas et le résultat obtenu est:

    toto est : server
    toto est : server
    toto est : server
    toto est : server
    toto est : server

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,

    Est-tu sûr qu'il n'y a pas d'espace avant et/ou après le mot server que tu stockes dans la variable check?

    Ajoute la ligne de code suivante dans ta boucle pour connaître le nombre de caractère.

    Si tu as un espace le test du while échouera.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    check=&(find /home/server/prd01/log/serverLog.txt | xargs grep '*** Ready!' | cut -d ":" -f1 | uniq)
    echo 'toto est : '$check
    echo $check | wc -c

  6. #6
    Membre averti Avatar de exodev
    Inscrit en
    Septembre 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2009
    Messages : 201
    Points : 359
    Points
    359
    Par défaut
    Hello,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ "$check" != "server" ]
    Attention à bien séparer les éléments dans l'expression pour que l'opération se fasse!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ if [ "0"=="1" ]; then echo "euh..."; fi
    >> euh...

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    merci à vous deux pour vos idées.

    J'ai donc ajouté la ligne de commande à mon script mais le résultat n'était pas celui attendu. En effet, il me donnait 22 alors que le mot 'server' ne contient que 6 caractères. Mais c'était une bonne idée et j'ai donc transformé mon script afin que la boucle while compare la taille de la variable au lieu du texte et voici la nouvelle tête de mon script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    check=1
    while [ ${#check}!=6 ] ; do
    check=$(find /home/prd03/PM/server/prd04/log/serverLog.txt | xargs grep '*** Ready!' | cut -d ":" -f1 | uniq)
    echo 'le resultat est :'$check'et alors'
    echo 'la taille de la variable est :'${#check}
    done
    echo 'trop cool'
    Résultat: le code n'arrive toujours pas à sortir de la boucle et affiche:
    le resultat est :serveret alors
    le taille de la variable est :6
    la taille de la variable est 6 et ma boucle while est censée le vérifier pour s'arrêter mais ce n'est pas le cas.
    Avez-vous une idée?
    Merci

  8. #8
    Membre averti Avatar de exodev
    Inscrit en
    Septembre 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2009
    Messages : 201
    Points : 359
    Points
    359
    Par défaut
    Avez-vous une idée?
    message du dessus
    Attention à bien séparer les éléments dans l'expression pour que l'opération se fasse!
    De plus pour la comparaison de types numériques sous bash il faut utiliser les opérateurs -eq (equal) -ne (not equal), etc... (cf man bash)

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    while (( ${#check} != 6 ))
    fonctionne parfaitement
    est comme déjà dit :
    Attention à bien séparer les éléments dans l'expression pour que l'opération se fasse!
    c'est a dire :
    (('espace'${#check}'espace'!='espace'..........

  10. #10
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Euh.. Je suis désolé mais je ne sais pas où il y a de mauvais espaces dans ce code?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    check=1
    while [ ${#check}!=6 ] ; do
    check=$(find /home/prd03/PM/server/prd04/log/serverLog.txt | xargs grep '*** Ready!' | cut -d ":" -f1 | uniq)
    echo 'le resultat est :'$check'et alors'
    echo 'la taille de la variable est :'${#check}
    done
    echo 'trop cool'
    De plus un man bash me sort beaucoup de choses certainement intéressantes mais je n'arrive pas à y trouver un réponse à mon problème de comparaison de valeur.

    Est-ce que tu peux juste me coder correctement cette partie là de la boucle while? merci

  11. #11
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par MarcG Voir le message
    while (( ${#check} != 6 ))
    fonctionne parfaitement
    est comme déjà dit :

    c'est a dire :
    (('espace'${#check}'espace'!='espace'..........
    AH zut, désolé, je n'aivait pas vu cette réponse.
    En effet, cela fonctionne très bien avec cette syntaxe.
    Merci, le problème est résolu....

  12. #12
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Y'a toujours un truc qui cloche dans ton script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /home/prd03/PM/server/prd04/log/serverLog.txt
    Tu peux nous expliquer a quoi sert ton find ???

Discussions similaires

  1. Résultat commande curl dans une variable
    Par Tonii dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 29/07/2014, 14h56
  2. [bash] Lire le résultat de wget dans une variable
    Par 6BerYeti dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 28/04/2014, 17h04
  3. [Shell]Find dans une variable
    Par yassoux dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 03/07/2013, 11h59
  4. stocké le résultat de Exec dans une variable !
    Par zoro007 dans le forum Linux
    Réponses: 3
    Dernier message: 06/01/2011, 13h08
  5. Résultat requête paramétrée dans une variable
    Par Jean1010 dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/05/2009, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo