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

Solaris Discussion :

Comparaison numérique flottante dans un if


Sujet :

Solaris

  1. #1
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut Comparaison numérique flottante dans un if
    Bonjour,

    J'ai une serveur unix qui tourne sous Solaris

    Je cherche a vérifier que le load average sur 15 minutes ne soit pas supérieur a 15 :
    script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    VALEUR=`top | grep "load averages" | awk {'print $5'}
    if [ $VALEUR -ge 15 ]
    then
    	echo "yes"
    fi
    Quand le lance le script j'ai cette erreur ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bash: [: 0.05: integer expression expecte
    Savez-vous comment je peut comparer un nombre a virgule ?

    Merci beaucoup

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    Bonjour,

    avec awk, tout simplement, qui n'a pas besoin d'être précédé de grep, puisqu'il (awk) sait (et c'est sa raison d'être) tester des regex, en plus de traiter les champs des fichiers.

    Tutoriel awk
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 223
    Points : 294
    Points
    294
    Par défaut
    bonjour,

    Bon c'est sur je ne suis pas un pro du shell unix mais moi en général je fais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    VALEUR=`top | grep "load averages" | awk {'print $5'}
    VALEUR=$(echo "($VALEUR<15)" | bc)
     
    if [ $VALEUR -eq 1 ]
    then
    	echo "ok"
    fi
    ça fonctionne, mais peut être qu'il y a beaucoup mieux...

  4. #4
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Voilà quelque chose de plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uptime | nawk '$NF>15 {print "yes"}'
    ɹǝsn *sıɹɐlos*

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    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 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par ludo40190 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    VALEUR=$(echo "($VALEUR<15)" | bc)
    if [ $VALEUR -eq 1 ]; then echo "ok"; fi
    Une fois de plus, je sais qu'on est dans un forum linux, mais, pour ceux qui peuvent être intéressés par la portabilité sous AIX, il faut savoir que le bc de AIX ne peut pas retourner le résultat d'une comparaison (un test n'est pas un objet de première classe):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "(3<15)" | bc      
    syntax error on line 1 stdin
    Un test DOIT être le premier argument d'un 'if' (ou 'while'):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo "x=1; if(3<15) x=0; x" | bc
    0
    $ echo "x=1; if(3<1) x=0; x" | bc 
    1
    Avec ce code, on peut choisir la logique "mathématique" (1 == true) comme pour le bc de linux ou la logique "shell" (0 == true) comme dans mon exemple.

    Et, en awk, d'après jiliagre et pour respecter le sens de la comparaison:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uptime | nawk '$NF<15 {print "ok"}'

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Et, en awk, d'après jiliagre et pour respecter le sens de la comparaison:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uptime | nawk '$NF<15 {print "ok"}'
    J'ai respecté la logique du script initial prévu pour afficher ok si la charge est supérieure à 15:
    ɹǝsn *sıɹɐlos*

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    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 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Bonjour,

    Ma version qui dans le concept devrait aussi fonctionner sous Solaris (en modifiant peut-être un petit peu la partie "uptime...")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ (echo 15 ; uptime | cut -d',' -f5)| sort -n | tail -1 | grep -q '^15$' && echo OK || echo KO
    OK
    Ici, on affiche ok, si inférieur à 15, sinon ko.

    Cordialement.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    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 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    J'ai respecté la logique du script initial prévu pour afficher ok si la charge est supérieure à 15:
    Oops! Au temps pour moi! Le post original était pourtant clair!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uptime | nawk '$NF>15 {print "yes"}'

  9. #9
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Voilà quelque chose de plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uptime | nawk '$NF>15 {print "yes"}'
    Bonjour,

    Merci beaucoup pour cette solution très simple.

    Si j'ai bien compris la variable $NF reprend la dernière colonne ?

    Merci

  10. #10
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Exactement.

    NF = "number of fields" = nombre de champs (=colonnes)
    $NF = contenu de la dernière colonne.
    ɹǝsn *sıɹɐlos*

  11. #11
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Exactement.

    NF = "number of fields" = nombre de champs (=colonnes)
    $NF = contenu de la dernière colonne.
    Merci beaucoup

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

Discussions similaires

  1. [XE] Comparaison de dates dans un Trigger
    Par Nicodemus dans le forum Oracle
    Réponses: 2
    Dernier message: 20/02/2006, 17h37
  2. Réponses: 4
    Dernier message: 16/12/2005, 18h43
  3. Comparaison de code dans plusieurs modules
    Par jbaudin dans le forum Access
    Réponses: 2
    Dernier message: 03/10/2005, 12h47
  4. [ListView] tri particulier (comparaison numérique)
    Par Cybher dans le forum C++Builder
    Réponses: 16
    Dernier message: 28/07/2005, 15h12
  5. Comparaison de nombre dans un tableau.
    Par slackjayo dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 29/04/2005, 18h21

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