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 :

Comparaison : -z ?


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Par défaut Comparaison : -z ?
    Bonjour,

    Je ne comprends pas cette manière de comparer avec -z ? On compare avec rien ?????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    verification=$(screen -ls | grep 'Name');
    if [ -z "$verification" ]
    then .......
    Merci d'avance pour votre aide éventuelle

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par help test | grep -- -z
    -z CHAÎNE Vrai si la CHAÎNE est vide.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 141
    Par défaut
    Si tu avais été chercher dans la documentation de ton shell (man sh|bash|ksh...), tu aurais lu que -z est un opérateur unaire (à un seul opérande) qui retourne vrai si la longueur de la chaîne testée est égale à 0 (chaîne vide).
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 307
    Par défaut
    Bonjour

    Encore une fois : Les crochets sont un raccourci pour la commande test.
    Ta condition est équivalente à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if test -z "$verification"
    Nulle comparaison dans ceci.

    D'ailleurs, si tu veux mon avis, il faut résumer tout ce bazar (tes 3 lignes de code) par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if screen -ls | grep -q 'Name'
    then

  5. #5
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if screen -ls | grep -q 'Name'
    then
    Donc si c'est vrai càd si Name est trouvé, alors....

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 307
    Par défaut
    Oui. Avec la plus-value que, si ton fichier fait 1Go, grep sortira à la première occurrence de 'Name', alors que tout le fichier sera parcouru pour écrire les lignes dans ta variable $verification, avec le procédé du premier message. Gain de temps, d'efficience, et de clarté.

  7. #7
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Par défaut
    -q, --quiet, --silent
    Quiet; do not write anything to standard output. Exit
    immediately with zero status if any match is found, even if an
    error was detected. Also see the -s or --no-messages option.
    S'il ne trouve pas l'occurence 'Name', le exit que provoque le -q empêchera-t-il d'aller dans le "else" pour sortir ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # VERIFICATION
    if screen -ls | grep -q 'Name'
    then
            echo "je relance...";
    else
    	echo "il y a une erreur";
    fi

  8. #8
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 307
    Par défaut
    "grep" donne à "if" un code retour. Ici, 0 (trouvé) ou 1 (pas trouvé). Le "if" fait le "then", si 0, et le "else", si 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ ls rip0.txt
    rip0.txt
    $ ls |grep -q rip; echo $?
    0
    $ ls |grep -q tata; echo $?
    1
    Dans ton cas, si 'Name' n'est pas trouvé, "grep" renvoie 1 à "if" qui exécute la clause "else".

  9. #9
    Invité
    Invité(e)
    Par défaut
    ls étant pris comme exemple d'une commande quelconque (sauf ls) qui affiche des données.
    on aurait aussi bien pu faire un simple echo pour passer une sortie à grep.

    il faut surtout ne pas reproduire cette pratique !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comparaison de 2 dates
    Par eisti dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2003, 11h33
  2. [langage] Comparaison de fichiers
    Par Jibees dans le forum Langage
    Réponses: 3
    Dernier message: 23/04/2003, 16h27
  3. Comparaison de fichier
    Par danzerg dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 11h49
  4. Comparaison JBuilder avec Sun ONE Studio
    Par chichos dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 13/11/2002, 15h08
  5. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25

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