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. 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
      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. 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
            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. 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. 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. 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. 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. Si cette solution est bien pouvez vous ou n'importe qui ici me dire comment en crée un fichier rpm (opensuse)

                  merci
                  1. Modérateur
                    Ben non c'est très bien comme ça, en quoi cette solution ne convient pas ?
                    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.