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 POSIX Discussion :

Question de débutant pour l'évaluation d'une expression booléenne [OS X] [Bash 3]


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 731
    Par défaut Question de débutant pour l'évaluation d'une expression booléenne
    Bonjour,

    j'ai une question qui parait assez simple, mais je n'arrive pas à trouver la solution
    je suis en BASH sous MAC
    j'ai essayé d'évaluer les expression booléennes suivantes (en ligne de commande)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    > declare -i a
    > declare -i b
    > a=3
    > b=3
    > $a=$b   -> ça ne donne pas le bon résultat (booleen "true"))
    > echo $a==$b  -> ça ne donne pas le bon résultat (booleen "true"))
    > echo ($a==$b) -> ça ne donne pas le bon résultat (booleen "true")) 
    > echo [$a==$b] -> ça ne donne pas le bon résultat (booleen "true")) 
    > echo $($a==$b) -> ça ne donne pas le bon résultat (booleen "true"))
    auriez-vous une idée ? Merci d'avance

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 694
    Par défaut
    Bonjour,

    en bash, l'évaluation arithmétique est réalisée entre double parenthèses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ (( 0 == 0 )); echo $?
    0
    $ (( 0 )); echo $?
    1
    $ (( 1 )); echo $?
    0
    $ (( 0 == 1 )); echo $?
    1
    $
    tu peux préciser tes intentions, stp ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 731
    Par défaut
    Bonjour N_BaH, et merci pour ta réponse


    j'ai testé aussi $ [ 0 == 0]; echo $? et ça marche

    Je ne comprend très bien la logique car normalement, d'après ce que j'ai lu [0 == 0] évalue l'expression booleenne et devrait seul renvoyer le résultat. Où est la logique dans ce que tu décrit ?

    En ce qui concerne mes intentions, je suis en train d'écrire un programme BASH sous MAC pour trier une liste de fichier avec certains critères. Comme je suis débutant en BASH (jusqu'à présent, je n'ai utilisé que les commandes SHELL basiques pour les opérations les plus courantes en ligne de commande). Du coup à chaque fois que j'écrit une commande SHELL dans mon fichier ".sh", je vérifie en ligne de commande que ça marche bien.

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

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

    Les crochets simples sont un raccourci pour la commande test.
    Pour plus d'info, taper 'help test'
    Le signe '=' est alors un comparateur textuel et non arithmétique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ test 0 = 0 ; echo $?
    0
    $ test 0 = 1 ; echo $?
    1
    $ test 0 = cacahuete ; echo $?
    1
    $ test cacahuete = cacahuete ; echo $?
    0
    $ [ cacahuete = cacahuete ]; echo $?
    0
    $ [ "cacahuete" = cacahuete ]; echo $?
    0

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 694
    Par défaut
    [ "0" = "0" ] n'effectue pas une évaluation arithmétique, mais lexicographique (c'est à dire que cela vérifie l'égalité des chaînes, et non des valeurs) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (( 1 == 01 )); echo $?
    0
    [ 0 = 01 ]; echo $?
    1
    les opérateurs de comparaisons arithmétiques de la commande test (alias [) sont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    -gt
    -ge
    -eq
    -ne
    -le
    -lt
    cf. help test, le man, et/ou les tutoriels inscrits dans ma signature.

    l'extension correcte pour un script bash est .bash.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 731
    Par défaut
    Bonjour à tous et merci pour vos réponse.

    je comprend mieux maintenant.
    J'ai regardé la documentation en détail aussi.
    Ceci dit, je trouve que le shell est vraiment très exigeant en synthaxe.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/07/2014, 11h09
  2. [W3C] Question de débutant pour remplacement des frames
    Par Grizzzly dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 24/07/2009, 17h44
  3. Réponses: 16
    Dernier message: 02/03/2009, 12h16
  4. Évaluation d'une expression conditionnelle
    Par Evocatii dans le forum Langage
    Réponses: 2
    Dernier message: 05/08/2007, 14h27
  5. Réponses: 10
    Dernier message: 19/11/2004, 00h12

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