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 :

Afficher disque disponible et la mémoire


Sujet :

Shell et commandes GNU

  1. #21
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par karamaster Voir le message
    totalMemoire=sudo cat /proc/meminfo |grep MemTotal |awk '{print $2}'.

    RESULTAT : Rien en sortie.
    Ce n'est pas la bonne syntaxe pour placer le résultat d'une commande dans une variable. Et tu la connais puisque tu l'emploies correctement en lignes 7 et 10.
    Accessoirement le sudo ne sert à rien (le fichier /proc/meminfo est accessible en lecture). Et puis cat fic |grep ... s'écrit plus simplement grep ... fic (et passer par fgrep quand c'est possible est plus rapide ou alors préciser que la chaine cherchée est au début de la ligne permet là aussi d'optimiser la recherche). Et N_BaH a donné il n'y a pas si longtemps que ça la syntaxe pour faire chercher directement par le awk.

    Citation Envoyé par karamaster Voir le message
    if [ "$memoire" != 0 ]
    On compare les chiffres avec -eq, -ne, -gt, -ge, -lt, -le. Ca semble équivalent au premier regard mais pas au second. Exemple [ 00 = 0 ] est faux tandis que [ 00 -eq 0 ] est vrai. Ceci dit, malheureusement, ni l'un ni l'autre ne fonctionneront avec un float.

    Citation Envoyé par karamaster Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while read ligne; do 
     memoire=$(echo "$ligne" | awk '{print $2}')
     
     if [ "$memoire" != 0 ]; then
          tailleOccupee=$(echo "$memoire" * "$totalMemoire" /100)
          echo "$tailleOccupee" 
     fi
    done < <(ps aux --no-headers | awk '{print $2 " " $4}')
    A quoi sert d'avoir récupéré $2 dans le "ps" puisque tu n'utilises (après donc l'avoir récupéré via un autre awk alors que cut, plus petit donc plus rapide, aurait parfaitement pu le faire) que $4 ???
    Et puis aussi... je ne suis pas certain que "echo" sache faire un calcul. A mon avis, quand il va traiter l'étoile, ça va merder grave à l'affichage...

    Citation Envoyé par karamaster Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [ "$tailleDisque" -eq 0 ]; then
          echo "Le disque $nomDisque est plein"
    fi
    A mon avis, l'OS t'aura prévenu depuis bien longtemps...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 660
    Par défaut
    accessoirement, cat non plus !
    et grep aussi, non plus.

    edit : et il est possible de paramétrer la sortie de ps pour n'afficher que les champs dont on a besoin. Ainsi, même awk n'est plus nécessaire.
    ne reste que le calcul, qu'on peut ne pas faire ligne par ligne :
    Code /bin/bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ mem=( $(ps hax -o %mem) )
    $ echo $(IFS='+'; echo "${mem[*]}") | bc -l
    35.1
    $
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #23
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Bonjour,

    Citation Envoyé par Sve@r Voir le message
    On compare les chiffres avec -eq, -ne, -gt, -ge, -lt, -le.
    les nombres ! J'ai testé, voir tout en bas.

    quand je tape help test, il me vient une petite page sympathique récapitulant les options de base pour les tests, mais une ligne me pose problème, vers la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne, -lt, -le, -gt, or -ge.
     
        Arithmetic binary operators return true if ARG1 is equal, not-equal,
        less-than, less-than-or-equal, greater-than, or greater-than-or-equal
        than ARG2.
    en français (et je rajoute les traits d'union sinon c'est parfois pas clair) ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        les opérateurs binaires arithmétiques renvoient vrai si ARG1 est égal-à, non-égal-à,
        inférieur-à, inférieur-ou-égal-à, supérieur-à ou supérieur-à-ou-égal-à ARG2.
    En gros j'en conclus ça renvoie toujours vrai. Ou je n'ai rien compris ?

    Merci pour les lumières,

    EDIT
    Bon, j'ai fait ça,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ a=5
    $ b=3
    $ [ $a -eq $b ] && echo "a=b"
    $ [ $a -ne $b ] && echo "a<>b"
    a<>b
    $ [ $a -lt $b ] && echo "a<b"
    $ [ $a -le $b ] && echo "a<=b"
    $ [ $a -gt $b ] && echo "a>b"
    a>b
    $ [ $a -ge $b ] && echo "a>=b"
    a>=b
    qui prouve noir sur blanc qu'"ils" se sont trompés en rédigeant leur ligne d'aide, ou alors faudra bien m'expliquer.

    Et ça fonctionne tout pareil avec [ $((a)) -OP $((b)) ] && echo "texte" mais l'avantage, c'est qu'on peut faire des opérations, là, genre [ $((a-2)) ... et ça, c'est bien sympa.

    quant aux nombres, j'ai testé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ a=5
    $ b=3
    $ [ $((a+7)) -eq $((b*4)) ] && echo "a=b"
    a=b
    $ [ $((a+7)) -eq $((b*4)) ] && echo $(((a+7))+((b*4)))
    24

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Les opérateurs binaires. C'est là que traduire n'est pas pertinent.
    -eq equal
    -ne not equal
    -lt less than
    -le less or equal
    -gt greater than
    -ge greater or equal

    Mais aussi -ot older than par exemple

    La ligne d'aide explicite en masse les opérateurs définis sans explications.

  5. #25
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Yep !
    Citation Envoyé par Flodelarab Voir le message
    Les opérateurs binaires. C'est là que traduire n'est pas pertinent.
    -eq equal
    -ne not equal
    -lt less than
    -le less or equal
    -gt greater than
    -ge greater or equal
    Ça, je pense que tout le monde l'avait compris, mais qu'est-ce que tu veux dire exactement ? La ligne d'aide dit que tous les tests retournent True alors que mes manips (l'EDIT tout en bas) montrent bien que non,

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Je répète : La ligne d'aide explicite en masse les opérateurs définis sans explications. Si tu préfères, rajoute le mot "respectivement" à la ligne d'aide.
    [ $((a+7)) -eq $((b*4)) ] && echo $(((a+7))+((b*4)))
    Et bien. Tu aimes les parenthèses. Sauf que là, y a erreur de syntaxe. Celle du milieu va à la fin.
    Je ne comprends pas vraiment ta question. Tout est juste et explicite.

  7. #27
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Je ne comprends pas vraiment ta question. Tout est juste et explicite.
    Citation Envoyé par help
    Arithmetic binary operators return true if ARG1 is not-equal than ARG2.
    Y a rien qui te choque, là ?
    Surtout si on met
    Citation Envoyé par help
    Arithmetic binary operators return true if ARG1 is equal than ARG2.
    en parallèle ?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Y a rien qui te choque, là ?
    Non, rien ne me choque. Tu n'as pas ajouté le mot "respectivement" comme je te l'ai dit. Il faut distribuer les explications sur les opérateurs a priori abscons. "test" renvoie TRUE pour l'opérateur -ne si ARG1 n'est pas égal à ARG2.
    Citation Envoyé par Jipété Voir le message
    Surtout si on met

    en parallèle ?
    "test" renvoie TRUE pour l'opérateur -eq si ARG1 est égal à ARG2.
    Tout est cohérent.

  9. #29
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Jipété Voir le message
    les nombres ! J'ai testé, voir tout en bas.
    Exact, j'ai dit "chiffre" en pensant "valeur numérique" donc les nombres. Tu as raison, la précision est importante, surtout sur un forum.

    Citation Envoyé par Jipété Voir le message
    en français (et je rajoute les traits d'union sinon c'est parfois pas clair) ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        les opérateurs binaires arithmétiques renvoient vrai si ARG1 est égal-à, non-égal-à,
        inférieur-à, inférieur-ou-égal-à, supérieur-à ou supérieur-à-ou-égal-à ARG2.
    En gros j'en conclus ça renvoie toujours vrai. Ou je n'ai rien compris ?
    Il faut lire entre les lignes (ou savoir rajouter ce qui est implicite). Pour les opérateurs arithmétiques binaires explicités juste au dessus et qui s'énumèrent en -eq, -ne, -lt, -le, -gt, -ge ; ces opérateurs renvoient vrai si respectivement ARG1 est égal à (donc là c'est pour le premier "-eq"), non égal à (pour le second "-ne"), inférieur à (le 3° "-lt"), inférieur ou égal à (le 4° "-le"), supérieur à (le 5° "-gt"), supérieur ou égal à (le 6° "-ge") ARG2.
    Ok c'est pas super explicite mais ce n'est pas non plus super compliqué à comprendre.

    Citation Envoyé par Jipété Voir le message
    quant aux nombres, j'ai testé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ a=5
    $ b=3
    $ [ $((a+7)) -eq $((b*4)) ] && echo "a=b"
    a=b
    $ [ $((a+7)) -eq $((b*4)) ] && echo $(((a+7))+((b*4)))
    24
    Tu aurais simplement écrit a=123; b=456 ça marchait aussi (ce sont bien des nombres).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #30
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Tu aurais simplement écrit a=123; b=456 ça marchait aussi (ce sont bien des nombres).
    Oui mais non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ b=3+2
    $ echo $b
    3+2


    Quant au reste, il m'a fallu du temps mais j'ai enfin compris, donc merci à vous.
    (quelle chaleur... Ceci explique peut-être cela)

  11. #31
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Oui mais non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ b=3+2
    $ echo $b
    3+2
    Euh... j'avais compris que tu voulais tester les opérateurs binaires ("-eq", "-ne", "-lt", etc.) sur des nombres. Pourquoi alors essayer de mettre "3+2" dans "b" au lieu de lui mettre tout simplement "5"?
    Tu écris a=123; b=456 et de là tu peux regarder le résultat de l'instruction test $a -ne $b && echo "$a pas égal à $b" || echo "$a égal à $b". Tu n'as absolument pas besoin de faire des opérations pendant ces instructions qui évaluent bel et bien des nombres (parce qu'un nombre ce n'est pas forcément une opération, c'est juste une valeur numérique)

    Ca fonctionne aussi avec des opérations bien entendu, car cela fait appel à une autre caractéristique du shell que de pouvoir évaluer directement les expressions arithmétiques (si on les écrit sous cette forme $((val1 operateur val2)) donc le shell commence par faire l'opération avant de récupérer son résultat et de l'évaluer ensuite => a=123; b=125; test $((a+1)) -ne $((b-1)) && echo "$((a+1)) pas égal à $((b-1))" || echo "$((a+1)) égal à $((b-1))") mais cela n'apporte absolument rien au test des opérateurs binaires "-eq" et autres (quand l'opérateur entre en action, les calculs exprimés ont déjà été remplacés par leur résultat).
    Tu peux le voir en activant le flag "-x"
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ~$ set -x; a=123; b=125; test $((a+1)) -ne $((b-1)) && echo "$((a+1)) pas égal à $((b-1))" || echo "$((a+1)) égal à $((b-1))"; set +x
    + a=123
    + b=125
    + test 124 -ne 124
    + echo '124 égal à 124'
    124 égal à 124
    + set +x
    ~$
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ declare -i b
    $ b=3+2
    $ echo $b
    5

  13. #33
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Euh... j'avais compris que tu voulais tester les opérateurs binaires ("-eq", "-ne", "-lt", etc.) sur des nombres. Pourquoi alors essayer de mettre "3+2" dans "b" au lieu de lui mettre tout simplement "5"?
    Parce que de test en test et d'idée qui germe en autre idée qui germe, on creuse plus profond, ici, ailleurs, c'est humain, on connait tous ça.

    Citation Envoyé par Sve@r Voir le message
    Tu peux le voir en activant le flag "-x"
    Citation Envoyé par Flodelarab Voir le message
    Ah, on reconnait bien là ceux qui pratiquent Bash à longueur de journée, ce qui n'est pas trop mon truc Nom : bah.gif
Affichages : 164
Taille : 275 octets

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/10/2007, 09h22
  2. plus de lecteur de disque depuis changement de mémoire RAM
    Par mae-andrasta dans le forum Composants
    Réponses: 8
    Dernier message: 08/06/2007, 12h19
  3. Travail sur disque au lieu de mémoire
    Par HurtMarley dans le forum Général Java
    Réponses: 8
    Dernier message: 31/05/2007, 10h05
  4. [VB..] Espace disque disponible
    Par SfJ5Rpw8 dans le forum Contribuez
    Réponses: 1
    Dernier message: 18/09/2006, 18h57
  5. [ftp] obtenir l'espace disque disponible
    Par FFF dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 27/11/2005, 14h29

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