Script bash pour importer variable de config

Résolu
sezam2 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33768 Date d'inscription   Statut Modérateur Dernière intervention   -
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
A voir également:

13 réponses

sezam2 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   5
 
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
sezam2 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   5
 
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
mamiemando Messages postés 33768 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
Il manque la question / le problème. Merci de faire un effort sur l'orthographe.
0
mamiemando Messages postés 33768 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
Ben non c'est très bien comme ça, en quoi cette solution ne convient pas ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sezam2 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   5
 
Si cette solution est bien pouvez vous ou n'importe qui ici me dire comment en crée un fichier rpm (opensuse)

merci
0
jeanbi Messages postés 15119 Date d'inscription   Statut Contributeur Dernière intervention   2 184
 
re,
un script en rpm !!!
je vois pas l'interet , mais bon
http://wiki.mandriva.com/
a+
0
sezam2 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   5
 
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
Blanc57 Messages postés 369 Date d'inscription   Statut Membre Dernière intervention   73
 
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
sezam2 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   5
 
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
Blanc57 Messages postés 369 Date d'inscription   Statut Membre Dernière intervention   73
 
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
sezam2 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   5
 
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
mamiemando Messages postés 33768 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
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
sezam2 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   5
 
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
mamiemando Messages postés 33768 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
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
mamiemando Messages postés 33768 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
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