Récupérer commande dans un fichier texte

Bonjour,

J'ai un fichier texte (test.txt) formaté de la façon suivante:

memoire.cmde=free
memoire.opts=m
memoire.args=
memoire.thr=20%

J'aimerais écrire un script qui permettrai le transformer en ligne de commande dans un ficher intermédiaire (test1.txt) comme suit :

$ free -m

le memoire.thr=20% permettra plus tard de déclencher une alerte quand la mémoire libre est inférieur à 20%.
Enfin, le script devra interpréter le fichier test1.txt et exécuter la commande free et l'afficher.

voici le peu de ligne de code que j'ai écrit pour le moment :

#! /bin/bash

awk '{FS="="}{print $2}' test.txt > test1.txt

mon fichier test1.txt est de la forme suivante:

m

20%

Comment puis je faire pour avoir:
- le free qui soit pris en compte ?
- la ligne de commande $ free -m dans mon test1.txt ?

Merci à tous pour votre aide.

5 réponses

  1. le formatage du forum supprime les lignes vides présentes avant et après m dans le fichier test1.txt
    0
    1. Contributeur
      Salut,

      Déjà, le nom des variables ne doivent pas contenir de point ;-\
      À remplacer par un underscore (ma_variable).

      Pour prendre en compte des variables contenues dans un autre fichier, il faut "sourcer" ledit fichier (commande 'source' ou '.').

      Pour interpréter une commande contenue dans une variable il faut "évaluer" ladite variable (commande 'eval').

      Mise en application :

      $ ls
      foo.sh*  test.txt
      
      $ cat test.txt 
      memoire_cmde=free
      memoire_opts=m
      memoire_args=
      memoire_thr=20%
      
      $ cat foo.sh 
      #! /bin/bash
      
      source test.txt
      
      eval ${memoire_cmde} -${memoire_opts} > test1.txt
      
      
      
      $ ./foo.sh 
      
      $ ls
      foo.sh*  test1.txt  test.txt
      
      $ cat test1.txt 
                   total       used       free     shared    buffers     cached
      Mem:         16062       3595      12467          0        119       2095
      -/+ buffers/cache:       1380      14682
      Swap:         3992          0       3992
      
      $

      ;-))
      0
      1. salut Zipe,

        merci beaucoup pour ta réponse complète qui m'a bien dépatouillée.

        Selon toi il est vraiment impossible d'avoir des variables avec un point dedans ?
        A tout hasard, est ce que tu connaitrais l'équivalent de la commande free sur Mac car c'est le matériel que j'utilise? et si oui, est ce que tu sais comment je peux extraire une variable du résultat de la commande en question, par exemple la mémoire totale, pour faire un calcul avec par la suite?

        Encore merci pour ton aide.
        0
        1. Contributeur
          Mac je ne connais pas, mais comme c'est à base d'Unix, je suppose que la commande "free" existe aussi ;-))

          Quand à extraire une partie du fichier, awk est ton ami :

          $ cat test1.txt 
                       total       used       free     shared    buffers     cached
          Mem:         16062       3559      12503          0        121       2096
          -/+ buffers/cache:       1341      14721
          Swap:         3992          0       3992
          
          $ awk '/^Mem:/ { print $2}'  test1.txt 
          16062
          
          $ 

          ;-))
          0
        2. Justement il ne la connait pas. la seule réponse qu'il me mette suite à man free c'est pour faire des allocations dynamiques de mémoire, du type malloc, alloc...

          Très bien vu le coup du awk, j'arrive pas à me mettre en tête qu'il travaille avec des tableaux.

          Merci
          0
      2. salut,

        Ici, 'eval' n'est pas nécessaire.
        cat >cmde.txt
        cmde=free
        opt='-m'
        ^D
        cat > exeCmdetxt
        #!/bin/bash
        . ./cmde.txt
        $cmde $opt
        ^D
        chmod u+x exeCmdetxt
        ./exeCmdetxt
                     total       used       free     shared    buffers     cached
        Mem:         16062       3559      12503          0        121       2096
        -/+ buffers/cache:       1341      14721
        Swap:         3992          0       3992
        si 'free' n'est pas disponible, peut-être y a-t-il quand même un fichier /proc/meminfo
        awk '/^MemTotal/{printf("%d Mo\n", $2/1024}' /proc/meminfo
        0
        1. Merci à tous pour vos aides.

          En fait le meilleur moyen pour obtenir les informations sur la mémoire vive du Mac est de faire un top et avec un grep sur Physmem et un awk on peut obtenir la mémoire libre.

          Voici la ligne de commande :

          #! /bin/bash

          top -l 1 | grep PhysMem: | awk '{print "La memoire libre est de :" $10}'

          Cependant je me retrouve face à un nouveau problème, mineur je pense, quand j'exécute mon script, le curseur retourne à la ligne et je suis obligé de faire un Ctrl+C pour arrêter l'exécution et avoir la réponse. Je pense que celà vient des options du top.

          Si quelqu'un a une idée ?
          0
          1. Contributeur
            man top :

                   -b : Batch mode operation
                        Starts  top  in  'Batch mode', which could be useful for sending output from top to other programs or to a
                        file.  In this mode, top will not accept input and runs until the iterations limit  you've  set  with  the
                        '-n' command-line option or until killed.
            0
          2. awk sait faire des recherches de motifs, 'grep' est inutile.
            top -bn1 | awk '/^Mem/{ print $2}'
            0
          3. je ne comprends pas pourquoi une fois de plus je n'ai pas l'option -b sous Mac OS X.

            Voici où j'en suis actuellement :

            #! /bin/bash
            memoire_cmde=top
            memoire_opts=o
            memoire_args=vsize
            
            echo $memoire_cmde #Ces trois lignes vérifient qu'il prend bien les bons arguments
            echo $memoire_opts
            echo $memoire_args
            
            eval ${memoire_cmde} -${memoire_opts} ${memoire_args} > test1.txt
            awk '/^PhysMem:/ {print "La memoire libre est de :" $10}' test1.txt


            Peux tu me dire ce que ton terminal t'affiche après l'exécution de ce script? merci à toi
            0
          4. J'ai trouvé comment résoudre mes problèmes de champs mémoire à extraire.
            J'ai donc mis ces deux données dans deux variables distinctes et j'aimerais maintenant effectuer un calcul avec la valeur de ces deux variables, en l'occurrence un calcul de pourcentage.

            Faut il convertir ces chaines de caractères en entiers ?
            merci
            0