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 :

Erreur dans script mémoire - problème de calcul


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut Erreur dans script mémoire - problème de calcul
    Bonjour,

    Voici un script que j'ai réalisé pour avoir des informations sur la mémoire d'une machine UNIX :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    function memoire()
    {
        TOTAL=`echo $(grep MemTotal: /proc/meminfo) | awk '{print $2}'`
        LIBRE=`echo $(grep MemFree: /proc/meminfo) | awk '{print $2}'`
        CACHE=`echo $(grep Cached: /proc/meminfo) | awk '{print $2}'`
        SWAPTOTAL=`echo $(grep SwapTotal: /proc/meminfo) | awk '{print $2}'`
        SWAPLIBRE=`echo $(grep SwapFree: /proc/meminfo) | awk '{print $2}'`
     
        TOTAL=$[TOTAL / 1000]
        LIBRE=$[LIBRE / 1000]
        CACHE=$[CACHE / 1000]
        SWAPTOTAL=$[SWAPTOTAL / 1000]
        SWAPLIBRE=$[SWAPLIBRE / 1000]
     
        UTILISE=$[TOTAL - LIBRE]
        RELLE_UTILISE=$[UTILISE - CACHE]
        RELLE_LIBRE=$[TOTAL - UTILISE]
        SWAP_UTILISE=$[SWAPTOTAL - SWAPLIBRE]
     
        echo "Mémoire totale             : $TOTAL Mo"
        echo "Mémoire libre              : $LIBRE Mo"
        echo "Mémoire utilisé            : $UTILISE Mo"
        echo "Mémoire cache              : $CACHE Mo"
        echo
        echo "Mémoire rééllement utilisé : $RELLE_UTILISE Mo"
        echo "Mémoire rééllement libre   : $RELLE_LIBRE Mo"
        echo
        echo "Swap totale                : $SWAPTOTAL Mo"
        echo "Swap libre                 : $SWAPLIBRE Mo"
        echo "Swap utilisé               : $SWAP_UTILISE Mo"
    }
     
    memoire
    Le soucie, c'est que ce script plante au niveau des calculs alors que quand j'écris ces lignes de commande dans le Shell, aucun problème, tout fonctionne correctement. De plus j'ai fais un script similaire pour la charge CPU, avec le même genre de calcul, et lui fonctionne à merveille !

    Savez vous se qui cloche dans mon script ?

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    J'ai même essayer ceci :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
        TOTAL=`cat /proc/meminfo | grep MemTotal: | awk '{print $2}'`
        LIBRE=`cat /proc/meminfo | grep MemFree: | awk '{print $2}'`
        CACHE=`cat /proc/meminfo | grep Cached: | awk '{print $2}'`
        SWAPTOTAL=`cat /proc/meminfo | grep SwapTotal: | awk '{print $2}'`
        SWAPLIBRE=`cat /proc/meminfo | grep SwapFree: | awk '{print $2}'`
     
        TOTAL=$[TOTAL / 1000]
        LIBRE=$[LIBRE / 1000]
        CACHE=$[CACHE / 1000]
        SWAPTOTAL=$[SWAPTOTAL / 1000]
        SWAPLIBRE=$[SWAPLIBRE / 1000]
     
        UTILISE=$[TOTAL - LIBRE]
        RELLE_UTILISE=$[UTILISE - CACHE]
        RELLE_LIBRE=$[TOTAL - UTILISE]
        SWAP_UTILISE=$[SWAPTOTAL - SWAPLIBRE]
     
        UTILISE_POURCENTAGE=$[UTILISE * 100 / TOTAL]
        SWAP_POURCENTAGE=$[SWAP_UTILISE * 100 / SWAPTOTAL]
     
        echo "Mémoire totale             : $TOTAL Mo"
        echo "Mémoire libre              : $LIBRE Mo"
        echo "Mémoire utilisé            : $UTILISE Mo soit $UTILISE_POURCENTAGE%"
        echo "Mémoire cache              : $CACHE Mo"
        echo
        echo "Mémoire rééllement utilisé : $RELLE_UTILISE Mo"
        echo "Mémoire rééllement libre   : $RELLE_LIBRE Mo"
        echo
        echo "Swap totale                : $SWAPTOTAL Mo"
        echo "Swap libre                 : $SWAPLIBRE Mo"
        echo "Swap utilisé               : $SWAP_UTILISE Mo soit $SWAP_POURCENTAGE%"
    En faite, ca débloque quand je récupère les informations TOTAL et LIBRE, je pense qu'il doit y avoir un problème dans la chaine que je récupère ! pourtant j'ai regardé s'il n'y avait pas de blanc en fesans un sed, mais rien à faire le problème est tjr la !

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Que veux tu dire par "débloque". Message d'erreur ou problème d'arrrondi?

    S'il s'agit du dernier cas, c'est normal, la précision des calculs en bash est limitée. Pour plus de précision, regarde du côté de bc.

    Par ailleurs, tu peux éviter une partie des calculs en parsant la sortie d'une commande du genre:

    Edit:

    Essaye aussi de changer tes motifs du grep en ancrant le début de chaîne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       TOTAL=`cat /proc/meminfo | grep ^MemTotal: | awk '{print $2}'`
        LIBRE=`cat /proc/meminfo | grep ^MemFree: | awk '{print $2}'`
        CACHE=`cat /proc/meminfo | grep ^Cached: | awk '{print $2}'`
        SWAPTOTAL=`cat /proc/meminfo | grep ^SwapTotal: | awk '{print $2}'`
        SWAPLIBRE=`cat /proc/meminfo | grep ^SwapFree: | awk '{print $2}'`
    Et, tant qu'à faire, change tes affectations de variables par quelque-chose de plus direct. Tu fais un cat -> grep -> awk alors qu'un seul awk pourrait suffire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        TOTAL=$(awk '/^MemTotal/ {print $2}' /proc/meminfo)
        LIBRE=$(awk '/^MemFree/ {print $2}' /proc/meminfo)
        CACHE=$(awk '/^Cached/ {print $2}' /proc/meminfo)
        SWAPTOTAL=$(awk '/^SwapTotal/ {print $2}' /proc/meminfo)
        SWAPLIBRE=$(awk '/^SwapFree/ {print $2}' /proc/meminfo)
    A peu près 30% plus rapide.
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    ok merci,

    je vais tester cela demain car la il est tard !

    Sinon je ne veux pas utiliser FREE car je veux un script portable au maximun...

    je vous tien au courant.

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    J'ai optimisé mon code après tes conseils.

    Sinon l'erreur que j'ai est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ")syntax error: operand expected (error token is "
    Quand j'execute mon script, ligne par ligne dans le shell, en écrivant chaques commandes à la main, j'ai aucun problème... c'est juste quand je veux executer ce code en bash que j'ai un message d'erreur.

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Help ! Personne pour m'aider ?

    Après pleins de test, je n'arrive tourjours pas à trouver mon erreur... il y a peut être d'autres solutions pour faire des calculs ?

    P.S : j'ai essayé avec bc, et j'ai aussi une erreur, il me dit qu'il y a un caractère invalide ^M...

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    C'est bon mon erreur est résolut !

    En faite dans mon code il n'y a aucune erreur !

    Je pense que c'est le faite d'avoir edité ma source avec windows puis avec avec unix...

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

Discussions similaires

  1. Try/Catch récupération message erreur dans script
    Par rikemSen dans le forum BODI
    Réponses: 4
    Dernier message: 03/04/2017, 16h45
  2. Problème Erreur De Script dans mon web browser
    Par CLeBeR dans le forum VB.NET
    Réponses: 3
    Dernier message: 22/10/2011, 00h19
  3. erreur dans script de menu
    Par gspereira dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/03/2011, 22h31
  4. Réponses: 1
    Dernier message: 22/10/2009, 14h35
  5. Réponses: 2
    Dernier message: 16/04/2009, 16h28

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