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 :

Test de comparaison "-0.45 > 0"


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 Test de comparaison "-0.45 > 0"
    Bonjour,
    Voici mon script de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    if bc <<< "-0.45 > 0"
    then
            echo "négatif"
    else
            echo "positif"
    fi
    Si je mets >, le résultat est :
    0
    négatif

    Si je mets <, le résultat est :
    1
    négatif

    Comment se fait-il qu'il ne rentre jamais dans la boucle else pour afficher "positif"
    C'est une dinguerie à s'en arracher les cheveux !!!
    Pouvez-vous m'aider svp ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    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 138
    Par défaut
    Bonjour,

    Ce que teste if ce n'est pas la valeur numérique qui est affichée mais le code retour de la commande qui est exécutée.
    Ici, la commande bc s'exécute sans erreur quel que soit le sens du comparateur. il est donc normal que seule la première branche du test soit conservée.
    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.

  3. #3
    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
    Désolé mais je ne comprends pas ....
    Car en fonction du sens du comparateur j'ai un 0 ou un 1 qui s'affiche. Donc le if devrait évaluer ce 0 ou ce 1 et changer de branche en fonction, non ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 721
    Par défaut
    pour la démonstration, je supprime tous les retours de la commande bc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ &>/dev/null bc <<<'-0.45<0'; echo $?
    0
    $ &>/dev/null bc <<<'-0.45>0'; echo $?
    0
    on voit que la commande n'échoue pas. sa syntaxe est correcte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (( $(bc <<<'-0.45>0') )); then echo "positif"; else echo "négatif"; fi

  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
    N_baH....tu me sauves encore... je l'ai retourné dans tous les sens avec des () des [] etc etc mais honnêtement j'ai encore du mal à comprendre quand il faut utiliser des (, des [ parfois des doubles, des " ou encore des ' et avec ça parfois un $.
    Ca me donne mal au cheveux..... j'ai l'impression qu'il y a toujours un cas de figure particulier !!!

    Sinon, y a-t-il moyen de remplacer bc <<< par | bc ??? Initialement, j'avais commencé avec ça.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 721
    Par défaut
    y a-t-il moyen de remplacer bc <<< par | bc ?
    oui, c'est possible.

  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
    Citation Envoyé par N_BaH Voir le message
    oui, c'est possible.
    A force de tatonnement sans conviction j'ai trouvé cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (( $(echo "-0.45 > 0" | bc) )); then echo "oui"; else echo "non"; fi
    Ca semble marcher.
    Tu confirmes la "propreté" ?

  8. #8
    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
    Ca ne marche pas lorsque j'essaie d'intégrer des variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    epoch=0
    epoch_prec=1
     
    if (( $(bc <<< 'echo "$epoch - $epoch_prec" < 0') )); then echo "oui"; else echo "non"; fi
    Je n'arrive pas à faire évaluer la différence des variables.
    Help please

  9. #9
    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
    Par contre ça, ça à l'air de marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (( $(echo "$epoch - $epoch_prec == 0" | bc) )); then echo "oui"; else echo "non"; fi

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    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 138
    Par défaut
    Citation Envoyé par BEEP-BEEP Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (( $(bc <<< 'echo "$epoch - $epoch_prec" < 0') )); then echo "oui"; else echo "non"; fi
    Je n'arrive pas à faire évaluer la différence des variables.
    A l'intérieur d'une chaine de caractères encadrée d'apostrophes, les variables ne sont pas évaluées.
    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.

  11. #11
    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
    Oui mais dans ma version avec | bc, l'évaluation se fait pourtant !?

  12. #12
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    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 138
    Par défaut
    Même si les variables avaient été évaluées, l'exécution de bc <<< 'echo "0 - 1" < 0' n'aurait pas été concluante.
    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.

  13. #13
    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
    Oui, c'est vrai.... et comme je ne maitrise pas la forme avec bc <<<
    Donc je vais garder cette version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (( $(echo "$epoch - $epoch_prec == 0" | bc) )); then echo "oui"; else echo "non"; fi
    qui semble marcher

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 721
    Par défaut
    le here-string (<<<) permet d'envoyer directement des données, sans recourir à une commande d'affichage (echo, printf).
    d'ailleurs, contrairement au here-doc, le here-string n'accepte pas de commande.

  15. #15
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    contrairement au here-doc, le here-string n'accepte pas de commande.
    Peux-tu préciser ce que tu veux dire par là ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ a=3; b=4; bc <<< $(echo "$a + $b")
    7
    Dans cet exemple, n'a-t-on pas une commande dans le here-string ?
    (même si, dans ce cas précis, la commande est juste parfaitement inutile)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 721
    Par défaut
    si, mais c'est un non-sens, en effet.

    pour faire propre :

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

Discussions similaires

  1. Test de comparaison de moyennes sur séries appariées
    Par mathis86 dans le forum SAS STAT
    Réponses: 9
    Dernier message: 14/03/2012, 18h08
  2. Test de comparaison
    Par NemoParis dans le forum SAS STAT
    Réponses: 6
    Dernier message: 20/08/2010, 15h56
  3. [Trucs&astuces] Tests et Comparaison de chaînes
    Par I'm_HERE dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 29/07/2009, 19h55
  4. Test de comparaison
    Par CélineM dans le forum SAS STAT
    Réponses: 7
    Dernier message: 15/04/2008, 12h59
  5. Test de comparaison
    Par Crazy_Gun dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 09/12/2005, 20h06

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