Script bash pour importer variable de config

Résolu/Fermé
sezam2 Messages postés 73 Date d'inscription mercredi 4 février 2009 Statut Membre Dernière intervention 26 mars 2010 - 9 mai 2009 à 01:22
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 2 juin 2009 à 20:07
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 mercredi 4 février 2009 Statut Membre Dernière intervention 26 mars 2010 5
2 juin 2009 à 18:18
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 mercredi 4 février 2009 Statut Membre Dernière intervention 26 mars 2010 5
9 mai 2009 à 02:20
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 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
9 mai 2009 à 02:00
Il manque la question / le problème. Merci de faire un effort sur l'orthographe.
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
9 mai 2009 à 14:46
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 mercredi 4 février 2009 Statut Membre Dernière intervention 26 mars 2010 5
10 mai 2009 à 19:30
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 15118 Date d'inscription samedi 9 décembre 2006 Statut Contributeur Dernière intervention 6 février 2023 2 182
10 mai 2009 à 19:40
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 mercredi 4 février 2009 Statut Membre Dernière intervention 26 mars 2010 5
10 mai 2009 à 21:33
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 vendredi 6 avril 2007 Statut Membre Dernière intervention 27 janvier 2020 73
10 mai 2009 à 22:33
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 mercredi 4 février 2009 Statut Membre Dernière intervention 26 mars 2010 5
10 mai 2009 à 23:49
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 vendredi 6 avril 2007 Statut Membre Dernière intervention 27 janvier 2020 73
10 mai 2009 à 23:55
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 mercredi 4 février 2009 Statut Membre Dernière intervention 26 mars 2010 5
11 mai 2009 à 00:02
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 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
11 mai 2009 à 00:29
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 mercredi 4 février 2009 Statut Membre Dernière intervention 26 mars 2010 5
14 mai 2009 à 00:56
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 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
14 mai 2009 à 11:07
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 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
2 juin 2009 à 20:07
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