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 :

Les chiffres significatifs


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut Les chiffres significatifs
    Bonjour,

    Je bute sur un problème où je veux obtenir seulement deux chiffres après la virgule.

    Voici mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #On va chercher la valeur
    val=$( ./bacrp $AUTOMATE $OBJECT $IDENTIFIER 85)
    echo val = $val
     
     
    #Chiffre après la virgule
    valeur=$(printf "%.2f" $val)
    echo valeur = $valeur

    Voici ce que me retourne le script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    + val=$'9.920000\r'
    + echo val = $'9.920000\r'
    val = 9.920000
    ++ printf %.2f $'9.920000\r'
    : nombre non valableintf: 9.920000
    + valeur=0,00
    + echo valeur = 0,00
    valeur = 0,00
    Pouvez-vous m'expliquer d'où vient mon erreur svp

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    Bonjour,

    Selon moi, tu as un souci entre l'utilisation du point "." pour une virgule "," ou vice versa.

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

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

    Pouvez-vous m'expliquer d'où vient mon erreur svp
    ce n'est pas toi, c'est bacrp, qui commet deux erreurs
    • finir ses lignes avec \r
    • utiliser un point comme séparateur décimal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /cheminAbsolu/bacrp $AUTOMATE $OBJECT $IDENTIFIER 85| sed 's/\r//; s/\./,/'
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

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

    utiliser un point comme séparateur décimal
    De toute façon, bash ne connaît que les nombres entiers. N'est-ce pas ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    oui, et non : bash ne fait pas de calculs sur les nombres décimaux, mais la builtin printf peut les formater en fonction de la locale.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut
    Effectivement N_BaH, le bout de code fonctionne parfaitement

    J'ai un dernier petit problème, je souhaite comparer ma valeur et afficher une sortie différente selon le seuil franchit mais j'ai un petit problème sur ma sortie :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #On va chercher la valeur
    val=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 85| sed 's/\r//; s/\./,/')
    unity=$( ./bacrp $AUTOMATE $OBJECT $IDENTIFIER 117)
     
    #Chiffres significatifs
    valeur=$(printf "%.2f" $val)
     
    #Condition et sortie nagios
    if [ "$valeur" >= "$CRIT" ];then
            echo "Valeur = "$valeur" "$unity" | $unity=$valeur;$WARN;$CRIT;0;$MAX" && exit 2
    elif [ "$valeur" >= "$WARN" ] && [ "$valeur" < "$CRIT" ];then
            echo "Valeur = "$valeur" "$unity" | $unity=$valeur;$WARN;$CRIT;0;$MAX" && exit 1
    else
            echo "Valeur = "$valeur" "$unity" | $unity=$valeur;$WARN;$CRIT;0;$MAX" && exit 0
    fi
    Cependant, je n'obtiens pas le résultat escompté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ++ /tmp/bacnet-stack-0.8.3/bin/bacrp 2098183 0 1 85
    + val=22,600000
    ++ ./bacrp 2098183 0 1 117
    + unity=$'degrees-celsius\r'
    ++ printf %.2f 22,600000
    + valeur=22,60
    + '[' 22,60 400 ']'
    test.sh: line 38: [: 22,60 : opérateur unaire attendu
    + '[' 22,60 300 ']'
    test.sh: line 40: [: 22,60 : opérateur unaire attendu
    =22,60;300;400;0;500'0 degrees-celsius
    =22,60;300;400;0;500es-celsius
    + exit 0
    J'aimerai pouvoir obtenir une sortie comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Valeur = "$valeur" "$unity" | $unity=$valeur;$WARN;$CRIT;0;$MAX"
    mais on me retourne cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =22,60;300;400;0;500es-celsius

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    Bash ne traite que les entiers, et encore...

    Pour comparer 2 entiers, il faut utiliser "test":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if test "$valeur" -ge "$CRIT"; then
    qui peut être abrégé avec les crochets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ "$valeur" -ge "$CRIT" ]; then
    Mais, pour les flottants, il faut utiliser autre chose, comme "bc" (man bc)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (( $(echo "$valeur >= $CRIT" | bc -l) )); then

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    Citation Envoyé par musha76 Voir le message
    J'aimerai pouvoir obtenir une sortie comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Valeur = "$valeur" "$unity" | $unity=$valeur;$WARN;$CRIT;0;$MAX"
    mais on me retourne cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =22,60;300;400;0;500es-celsius
    Je ne comprends pas quelle sortie tu veux.

    Il n'est pas nécessaire de mettre plein de guillemets.
    Il vaut mieux mettre un seul argument de "echo", avec une seule paire de guillemets, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Valeur = $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX"

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

Discussions similaires

  1. extraire uniquement les chiffres d'une cellule
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/08/2017, 18h25
  2. un champ n'accepte que les chiffres....
    Par fadex dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 19/10/2005, 14h18
  3. xslt --> test sur les chiffres
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/09/2005, 13h17
  4. Algorithme pour chiffres significatifs en Assembleur
    Par lutin2003 dans le forum Assembleur
    Réponses: 5
    Dernier message: 09/09/2004, 10h47
  5. Recherche programme qui convertit les chiffres arabes en nb
    Par oli57 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 15/06/2002, 03h11

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