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é :)
    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. Modérateur
        Il manque la question / le problème. Merci de faire un effort sur l'orthographe.
        1. Modérateur
          Ben non c'est très bien comme ça, en quoi cette solution ne convient pas ?
          1. Si cette solution est bien pouvez vous ou n'importe qui ici me dire comment en crée un fichier rpm (opensuse)

            merci
            1. Contributeur
              re,
              un script en rpm !!!
              je vois pas l'interet , mais bon
              http://wiki.mandriva.com/
              a+
              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
            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...
              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
                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 ;)
              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
                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
                  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
                    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
                      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