Script bash pour importer variable de config

Résolu
Bonjour,
salut et encore une fois le fameux script
#!/bin/bash

if [ -e /opt/topnet/mnt/mysql.pipe ] ; then
 while [ -e /opt/topnet/mnt/mysql.pipe ]
  do
  mysql -u syslog --password=syslog -D syslog < /opt/topnet/mnt/mysql.pipe
 done

else

mkfifo /opt/topnet/mnt/mysql.pipe
 fi


les variable
$user
$password
$base
d'un fichier de configuration

j'ai fait cet essai mai il marche pas
j'ai ajouter le script suivan devant le script précedent
#!/bin/bash
SD = cat'config'
for i in $SD; do
echo $i;
done
if [ -e /opt/topnet/mnt/mysql.pipe ] ; then
 while [ -e /opt/topnet/mnt/mysql.pipe ]
  do
  mysql -u syslog --password=$pwd -D syslog < /opt/topnet/mnt/mysql.pipe
 done

else

mkfifo /opt/topnet/mnt/mysql.pipe
 fi



je veut récuprer
Configuration: Linux Suse
Firefox 3.0.4

13 réponses

  1. c'est résolu je n'ai pas à parser

    je cree un fichie config

    /etc/config.cfg
    VAR1=v
    VAR2=w

    pui au début de mon scrippt

    j'ajoute

    source /etc/config.cfg

    et le tour est joué :)
    3
    1. La question est la suivante

      je n'arrive pas à recuppere les varaiable ds le script toutfois j'ai trouvé la soltion suivante

      #!/bin/bash
      . ./etc/mapping.cfg
      if [ -e /opt/topnet/mnt/mysql.pipe ] ; then
       while [ -e /opt/topnet/mnt/mysql.pipe ]
        do
        mysql -u $base  --password=syslog -D syslog < /opt/topnet/mnt/mysql.pipe
       done
      
      else
      
      mkfifo /opt/topnet/mnt/mysql.pipe
       fi
      


      avec
      mapping.cfg contient
      base=nom_base

      et
      jai fait chmod +x /etc/mapping.cfg

      2 ça marche mais il y' a til mieux?
      1
      1. Modérateur
        Il manque la question / le problème. Merci de faire un effort sur l'orthographe.
        0
        1. Modérateur
          Ben non c'est très bien comme ça, en quoi cette solution ne convient pas ?
          0
          1. Si cette solution est bien pouvez vous ou n'importe qui ici me dire comment en crée un fichier rpm (opensuse)

            merci
            0
            1. Contributeur
              re,
              un script en rpm !!!
              je vois pas l'interet , mais bon
              http://wiki.mandriva.com/
              a+
              0
              1. salut

                il n'ya pas seuleemnet le scrit il y a :

                le fichier config /etc/mapping.cfg

                le fichier /user/bin/mapping qui contient ce script la

                kle fichier init /etc/init.d/mapping qui permet les commande rcmapping start /stop et status..

                je veut faire un fichier rpm qui avec la commande

                rpm -Uvh mapping.rpm

                installe ces fichiers

                merci
                0
            2. erreur...

              Je n'avais pas vu les précédentes réponses...

              par contre, la syntaxe me parait fausse dans la seconde partie du script, lorsque tu veux déclarer la varable SD :
              SD = cat 'config'

              Il me semble que ce serait plutôt :

              SD=$(cat 'config')

              afin que le "car" soit executé car selon ta syntaxe, ta variable SD sera égale à "cat 'config' " sans que la commande "cat" ne soit executée...
              0
              1. merci mais j'ai renancé à cette tentative dead end car même si je rectifie SD=$(cat 'config')

                je n'ai aucun moyen d'accéder au variables

                base=nom_base
                pwd=mot_passe
                ///////////////////// si vous le savez dites le moi ;)
                ds le fichier config

                j'ai opté pour la solution suivante
                #!/bin/bash
                . ./etc/mapping.cfg
                if [ -e /opt/topnet/mnt/mysql.pipe ] ; then
                 while [ -e /opt/topnet/mnt/mysql.pipe ]
                  do
                  mysql -u $base  --password=syslog -D syslog < /opt/topnet/mnt/mysql.pipe
                 done
                
                else
                
                mkfifo /opt/topnet/mnt/mysql.pipe
                 fi
                
                


                mon problème maintennat est comment créer un rpm qui en l'installant

                va copier

                le fichier config /etc/mapping.cfg

                le fichier /user/bin/mapping qui contient ce script la

                le fichier init /etc/init.d/mapping qui permet les commande rcmapping start /stop et status..

                merci
                0
                1. Désolé... Je ne pourrai pas vous être d'une plus grande aide quant à la création de votre RPM, n'ayant aucune expérience sur le sujet...

                  Mais bonne chance malgré tout ;)
                  0
              2. merci

                une dernière question

                si je fait

                SD=$(cat 'config')
                le
                comment je peut accéder aux variablee contenue dans le fichier config qui sont de ce type

                user=blabla
                password=titi
                base=tata
                pipe=toto.pipe

                de telle sorte que mon scripte soit
                mysql -u $user --password=$password -D $base < /opt/topnet/mnt/$pipe

                ou devraige garder le

                . ./config au debut du script
                merci
                0
                1. Modérateur
                  Tu peux stocker une instruction shell (dont une déclaration de variable) dans une variable shell. Ainsi tu peux tout à fait écrire :
                  #!/bin/sh
                  cmd="ls"
                  $cmd

                  Ça permet notamment de générer des commandes shell à la volée. Toutefois dans ton cas il me parait plus logique d'inclure le fichier via un "source config" ou ". config".

                  Bonne chance
                  0
                  1. Bonsoir on est revenu à ala case départ

                    On m'a refuser la solution de

                    . .$/etc/mapping.cfg

                    et je doit faire un script qui récupère des variables d'un fichier de configuation

                    #!/bin/bash
                    recupéraion des variable
                    
                    if [ -e /opt/topnet/mnt/mysql.pipe ] ; then
                     while [ -e /opt/topnet/mnt/mysql.pipe ]
                      do
                      mysql -u $base  --password=syslog -D syslog < /opt/topnet/mnt/mysql.pipe
                     done
                    
                    else
                    
                    mkfifo /opt/topnet/mnt/mysql.pipe
                     fi
                    


                    au secour
                    0
                    1. Modérateur
                      Bah il faut parser ton fichier de configuration à la main. C'est effectivement dangereux si quelqu'un introduit une ligne malicieuse dans le fichier et que les droits de celui-ci sont moindres que ceux du script.

                      Dans ton cas, ton script doit donc lire le fichier de configuration lis ligne par ligne. Si la ligne une chaîne contenant un = c'est une affectation (le mieux c'est de vérifier que la ligne à une bonne tête avec une expression régulière).

                      Ceci fait, il ne reste plus qu'à extraire l'opérande gauche de l'affectation (nom de la variable) et l'opérande droite (valeur).

                      Bonne chance
                      0
                      1. Modérateur
                        J'ai un peu de mal à suivre. C'est ce que je t'avais dit dans le message <11> sachant que ". /etc/config.cfg " et "source /etc/config.cfg" font la même chose. Or dans <12> tu disais que cette solution avait été rejetée.

                        Enfin bref, peu importe, l'important c'est que ton problème soit résolu.

                        Bonne continuation
                        0