# Vérifier variables d'un fichier de conf

**URL:** <https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150 "2016-02-21T20:39:44Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![eric0279](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/94ad74/32.png) [@eric0279](https://www.debian-fr.org/u/eric0279)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/1 "2016-02-21T20:39:44Z")

</div>

Bonjour,

Je stock des variables dans un fichier .conf, un exemple :

```auto
SRCDS_FOLDER_NAME="serv00_l4d2"

# Nom du screen
SRCDS_SCREEN="${SRCDS_FOLDER_NAME}"

# Nom du jeu a lancer
# Ex: l4d2 => left4dead2
# Ex: counter-strike source => cstrike
# Ex: counter-strike go => csgo
# Ex: tf2 => tf
SRCDS_GAME_NAME="left4dead2"

# Adresse IP
SRCDS_IP="192.168.1.2"

# Tickrate
SRCDS_TICKRATE=""
```

mais le problème est que je ne trouve pas comment vérifier si une variable est vide dans une boucle.

car faire un if [-z MAVAR] ne ferait pas très propre… et surtout que l’utilisateur peut lui même ajouter une variable.

en faisant :

```auto

```

`
for variable in "$TEST"
do
  eval valeur=\$$variable
  if test -z "$valeur"
  then
    echo "ERREUR: La variable $variable est actuellement vide"
  fi
done`

Le problème est que la variable $TEST contient tout en un alors que je voudrais avoir un résultat :  
for variable in “$SRCDS\_SCREEN” “$SRCDS\_GAME\_NAME” “$SRCDS\_IP” "$SRCDS\_TICKRATE"  
do  
eval valeur=$$variable  
if test -z "$valeur"  
then  
echo "ERREUR: La variable $variable est actuellement vide"  
fi  
done[/code]

en espérant avoir été assez explicite.

Cordialement,

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/2 "2016-02-21T20:39:45Z")

</div>

Bonjour

je viens de faire ça:

[code]michel@debG53SW:~$ cat \> test.conf  
SRCDS\_FOLDER\_NAME=«&nbsp;serv00\_l4d2&nbsp;»

# Nom du screen

SRCDS\_SCREEN=«&nbsp;${SRCDS\_FOLDER\_NAME}&nbsp;»

# Nom du jeu a lancer

# Ex: l4d2 =\> left4dead2

# Ex: counter-strike source =\> cstrike

# Ex: counter-strike go =\> csgo

# Ex: tf2 =\> tf

SRCDS\_GAME\_NAME=«&nbsp;left4dead2&nbsp;»

# Adresse IP

SRCDS\_IP=«&nbsp;192.168.1.2&nbsp;»

# Tickrate

SRCDS\_TICKRATE=«&nbsp;&nbsp;»  
^C  
michel@debG53SW:~$ grep ‹&nbsp;""&nbsp;› test.conf  
SRCDS\_TICKRATE=«&nbsp;&nbsp;»  
michel@debG53SW:~$ rm test.conf  
michel@debG53SW:~$[/code]

=====

> [@](#):
>
> … la variable $TEST contient tout en un…

Ou alors, si j’ai mal compris, transmet un retour de

```auto
echo $TEST
```

---

<div class="post-metadata">

**Author:** ![eric0279](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/94ad74/32.png) [@eric0279](https://www.debian-fr.org/u/eric0279)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/3 "2016-02-21T20:39:45Z")

</div>

oui tu n’a pas compris, je vais essayer de faire mieux.

Dans le code :

`
for variable in "$TEST"
do
  eval valeur=\$$variable
  if test -z "$valeur"
  then
    echo "ERREUR: La variable $variable est actuellement vide"
  fi
done`

Je voudrais que la variable $TEST regroupe toutes les variables du fichier .conf sous la forme :

`for variable in "SRCDS_SCREEN" "SRCDS_GAME_NAME" "SRCDS_IP" "SRCDS_TICKRATE"
do
eval valeur=\$$variable
if test -z "$valeur"
then
echo "ERREUR: La variable $variable est actuellement vide"
fi
done`

Actuellement un echo $TEST retourne :

[quote]  
SRCDS\_USER=“serveur” SRCDS\_FOLDER\_NAME=“serv00\_l4d2” SRCDS\_SCREEN="${SRCDS\_FOLDER\_NAME}" SRCDS\_GAME\_NAME=“left4dead2” SRCDS\_IP=“192.168.1.40” SRCDS\_TICKRATE=""[/quote]

---

<div class="post-metadata">

**Author:** ![agentsteel](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/97f17d/32.png) [@agentsteel](https://www.debian-fr.org/u/agentsteel)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/4 "2016-02-21T20:39:47Z")

</div>

Pour inclure ton fichier de conf (et donc tes variables) dans ton script, et les tester, tu peux le faire par exemple comme ceci :

```auto
#!/bin/bash
#
. /mon/fichier.conf

if [[-z "$MAVAR"]]; then
 echo "houla pas bon!"
else
 ....
fi
```

voir le [mono]man bash[/mono] à la ligne 2415

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/5 "2016-02-21T20:39:48Z")

</div>

C’est hyper dangereux c’que vous faites les gars, c’est sujet à de l’injection de code bien comme il faut (que ce soit avec eval ou source).

J’ai pas bien compris l’objectif, mais peut être que ma fonction [mono]load[/mono] de mon [moteur de template](https://bitbucket.org/barmic/bash-templet/src/1646642cf31fa327613541168bfc1275e8b30772/engine.sh?at=default).

Si tu tiens à exécuter du code il n’y a rien de décidable et systématiquement possibilité de faille.

---

<div class="post-metadata">

**Author:** ![M3t4linux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/5daacb/32.png) [@M3t4linux](https://www.debian-fr.org/u/M3t4linux)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/6 "2016-02-21T20:39:48Z")

</div>

[quote]#!/bin/bash  
#####################################################################

# LICENCE PUBLIQUE RIEN À BRANLER[/quote]

J’adore ton “franc-écrit” !!

---

<div class="post-metadata">

**Author:** ![eric0279](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/94ad74/32.png) [@eric0279](https://www.debian-fr.org/u/eric0279)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/7 "2016-02-21T20:39:48Z")

</div>

@Agent:

[quote]car faire un if [-z MAVAR] ne ferait pas très propre… et surtout que l’utilisateur peut lui même ajouter une variable.[/quote] voir premier post.

@Mister, je vais regarder cela, merci.

L’objectif est simple, je voudrais vérifier toutes les variables du fichier .conf en une boucle et si l’une d’elle est vide = erreur en prenant en compte que l’utilisateur peut ajouter une variable. Enlever les commentaires et lire un fichier ligne par ligne, j’y arrive mais après je galère un peu…

@Linux c’est quoi ton problème ? edit: ok je comprends mieux lol

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/8 "2016-02-21T20:39:48Z")

</div>

> [@eric0279](#):
>
> L’objectif est simple, je voudrais vérifier toutes les variables du fichier .conf en une boucle et si l’une d’elle est vide = erreur en prenant en compte que l’utilisateur peut ajouter une variable. Enlever les commentaires et lire un fichier ligne par ligne, j’y arrive mais après je galère un peu…

Souhaite-tu calculer la valeur des variables ? Par exemple :

```auto
NOM_VAR="$(cat fichier)"
```

---

<div class="post-metadata">

**Author:** ![eric0279](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/94ad74/32.png) [@eric0279](https://www.debian-fr.org/u/eric0279)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/9 "2016-02-21T20:39:48Z")

</div>

Non, je veux simplement vérifier si une des variables est vide dans le fichier de .conf en prenant en compte qu’une variable peut être ajoutée.

Je ne peux pas mieux m’exprimer…

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/10 "2016-02-21T20:39:49Z")

</div>

A vu de nez :

[code]# Write error message on stderr and die  
function die() {  
echo “$@” \>&2  
exit 1  
}

# Load var from properties files

function load() {  
for propertie in “$@” ; do  
[[-f “${propertie}”]] || die "load() : “${propertie}” don’t exist !“  
while read ; do  
[[-n “${REPLY%%=_}" && -z "${REPLY#_=}”]] || die “load() : La variable “${REPLY%%=_}" est vide !"  
eval "${REPLY%%=_}”=’”${REPLY#\*=}”'  
done \< "${propertie}"  
done  
}[/code]

---

<div class="post-metadata">

**Author:** ![agentsteel](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/97f17d/32.png) [@agentsteel](https://www.debian-fr.org/u/agentsteel)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/11 "2016-02-21T20:39:52Z")

</div>

[quote=“MisterFreez”]C’est hyper dangereux c’que vous faites les gars, c’est sujet à de l’injection de code bien comme il faut (que ce soit avec eval ou source).  
[/quote]  
Oui en effet, je n’avais pas fait attention à ce risque mais c’est vrai que je n’utilise cette technique qu’avec des fichiers protégés contre l’écriture par des utilisateurs non autorisés.

du coup il y a des exemples pour vérifier un fichier de config, avec cette technique, là :  
[wiki.bash-hackers.org/howto/conffile?s](http://wiki.bash-hackers.org/howto/conffile?s)[]=source  
(exemple qui ne protège toujours pas dans tous les cas…)

---

<div class="post-metadata">

**Author:** ![eric0279](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/94ad74/32.png) [@eric0279](https://www.debian-fr.org/u/eric0279)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/12 "2016-02-21T20:39:53Z")

</div>

Re,

j’arrive à extraire et à parser par contre je bloque car il ne prend que la dernière ligne 😠

```auto
configfile="conf_srcds.conf"

#On execute le fichier de conf
. $configfile

#Extraction des variables
grep -v ^\# $configfile | grep . | awk -F '="' '{ print $1}' | grep -v ^\PARAM | grep -v ^\UPDATE_LOG | grep -v ^\INSTALL_LOG >> file.tmp

# On ajoute " au debut et a la fin
sed -e 's/.*/"&/' file.tmp > files.tmp
sed -e 's/.*/&"/' files.tmp > file.tmp

# On parse le fichier pour avoir une sortie pas trop longue
pr -s' ' -aT --columns=6 file.tmp > files.tmp
sed -e 's/.*/& \\/' files.tmp > file.tmp
sed '$s/.$//' file.tmp > files.tmp

#echo $LOL retourne tout le fichier sans probleme
LOL=`cat file.tmp` #ou LOL="$(</file.tmp)"

for variable in $LOL
do
eval valeur=\$$variable
if test -z "$valeur" #Valeur ne retourne que la derniere ligne du fichir
then
echo "ERREUR: La variable $variable est actuellement vide"
fi
done
```

cat file.tmp:

> [@](#):
>
> «&nbsp;NETWORK&nbsp;» «&nbsp;SRCDS\_USER&nbsp;» «&nbsp;SRCDS\_FOLDER\_NAME&nbsp;» «&nbsp;SRCDS\_SCREEN&nbsp;» «&nbsp;SRCDS\_GAME\_NAME&nbsp;» «&nbsp;SRCDS\_IP&nbsp;»   
> «&nbsp;SRCDS\_TICKRATE&nbsp;» «&nbsp;SRCDS\_APP&nbsp;» «&nbsp;CLIENT\_APPID&nbsp;» «&nbsp;SRCDS\_STEAM\_FILES&nbsp;» «&nbsp;SRCDS\_SVPURE&nbsp;» «&nbsp;SRCDS\_MAXPLAYERS&nbsp;»   
> «&nbsp;SRCDS\_MAPCYCLE&nbsp;» «&nbsp;SRCDS\_PORT&nbsp;» «&nbsp;SRCDS\_MAP&nbsp;» «&nbsp;SRCDS\_BACKUP&nbsp;» «&nbsp;SRCDS\_SERVERCFG&nbsp;» «&nbsp;SRCDS\_GAMETYPES&nbsp;»   
> «&nbsp;SRCDS\_MODETYPES&nbsp;» «&nbsp;SRCDS\_MAPTYPES&nbsp;» «&nbsp;SRCDS\_USERCON&nbsp;» «&nbsp;SRCDS\_MAXOVERRIDE&nbsp;» «&nbsp;SRCDS\_NOTV&nbsp;» «&nbsp;SRCDS\_BIN&nbsp;»   
> «&nbsp;SRCDS\_DIR\_STEAMCMD&nbsp;» «&nbsp;SRCDS\_STEAMCLIENT&nbsp;» «&nbsp;SRCDS\_STEAMCMD\_BIN&nbsp;» «&nbsp;SRCDS\_STEAM\_LOGIN&nbsp;» «&nbsp;SRCDS\_FORCE\_DIR&nbsp;» «&nbsp;DIR\_LOGS&nbsp;»   
> «&nbsp;UPDATE\_EMAIL&nbsp;» «&nbsp;UPDATE\_RETRY&nbsp;» «&nbsp;SRCDS\_SOURCETV&nbsp;» «&nbsp;SRCDS\_TVPORT&nbsp;» «&nbsp;SRCDS\_DEBUG&nbsp;» «&nbsp;SCRIPT\_DEBUG&nbsp;»

echo $LOL:

> [@](#):
>
> «&nbsp;NETWORK&nbsp;» «&nbsp;SRCDS\_USER&nbsp;» «&nbsp;SRCDS\_FOLDER\_NAME&nbsp;» «&nbsp;SRCDS\_SCREEN&nbsp;» «&nbsp;SRCDS\_GAME\_NAME&nbsp;» «&nbsp;SRCDS\_IP&nbsp;» \ «&nbsp;SRCDS\_TICKRATE&nbsp;» «&nbsp;SRCDS\_APP&nbsp;» «&nbsp;CLIENT\_APPID&nbsp;» «&nbsp;SRCDS\_STEAM\_FILES&nbsp;» «&nbsp;SRCDS\_SVPURE&nbsp;» «&nbsp;SRCDS\_MAXPLAYERS&nbsp;» \ «&nbsp;SRCDS\_MAPCYCLE&nbsp;» «&nbsp;SRCDS\_PORT&nbsp;» «&nbsp;SRCDS\_MAP&nbsp;» «&nbsp;SRCDS\_BACKUP&nbsp;» «&nbsp;SRCDS\_SERVERCFG&nbsp;» «&nbsp;SRCDS\_GAMETYPES&nbsp;» \ «&nbsp;SRCDS\_MODETYPES&nbsp;» «&nbsp;SRCDS\_MAPTYPES&nbsp;» «&nbsp;SRCDS\_USERCON&nbsp;» «&nbsp;SRCDS\_MAXOVERRIDE&nbsp;» «&nbsp;SRCDS\_NOTV&nbsp;» «&nbsp;SRCDS\_BIN&nbsp;» \ «&nbsp;SRCDS\_DIR\_STEAMCMD&nbsp;» «&nbsp;SRCDS\_STEAMCLIENT&nbsp;» «&nbsp;SRCDS\_STEAMCMD\_BIN&nbsp;» «&nbsp;SRCDS\_STEAM\_LOGIN&nbsp;» «&nbsp;SRCDS\_FORCE\_DIR&nbsp;» «&nbsp;DIR\_LOGS&nbsp;» \ «&nbsp;UPDATE\_EMAIL&nbsp;» «&nbsp;UPDATE\_RETRY&nbsp;» «&nbsp;SRCDS\_SOURCETV&nbsp;» «&nbsp;SRCDS\_TVPORT&nbsp;» «&nbsp;SRCDS\_DEBUG&nbsp;» «&nbsp;SCRIPT\_DEBUG&nbsp;»

Une suggestion ?

---

<div class="post-metadata">

**Author:** ![flavien](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/f475e1/32.png) [@flavien](https://www.debian-fr.org/u/flavien)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/13 "2016-02-21T20:39:54Z")

</div>

Dans ta boucle for, en ajoutant un echo $variable avant le if, toutes les variables du fichier file.tmp s’affichent chez moi.  
Peux-tu faire de même et donner un retour ?

---

<div class="post-metadata">

**Author:** ![agentsteel](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/97f17d/32.png) [@agentsteel](https://www.debian-fr.org/u/agentsteel)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/14 "2016-02-21T20:39:55Z")

</div>

[quote=“MisterFreez”]A vu de nez :

[code]# Write error message on stderr and die  
function die() {  
echo “$@” \>&2  
exit 1  
}

# Load var from properties files

function load() {  
for propertie in “$@” ; do  
[[-f “${propertie}”]] || die "load() : “${propertie}” don’t exist !“  
while read ; do  
[[-n “${REPLY%%=_}" && -z "${REPLY#_=}”]] || die “load() : La variable “${REPLY%%=_}" est vide !"  
eval "${REPLY%%=_}”=’”${REPLY#\*=}”'  
done \< "${propertie}"  
done  
}[/code][/quote]

Testé et corrigé une petite erreur :

fichier test.conf

```auto
VAR1="hello"
VAR2="youhou"
VAR3="13456"
VAR4=
```

le script

```auto
#!/bin/bash

# Write error message on stderr and die
function die() {
  echo "$@" >&2
  exit 1
}

# Load var from properties files
function load() {
  for propertie in "$@" ; do
    [[-f "${propertie}"]] || die "load() : \"${propertie}\" don't exist !"
    while read ; do

#echo "${REPLY%%=*}"
#echo "${REPLY#*=}"

      [[-n "${REPLY%%=*}" && -z "${REPLY#*=}"]] && die "load() : La variable \"${REPLY%%=*}\" est vide !"
      eval "${REPLY%%=*}"=\'"${REPLY#*=}"\'
    done < "${propertie}"
  done
}

load "test.conf"

echo "VAR1=$VAR1"
echo "VAR2=$VAR2"
echo "VAR3=$VAR3"
echo "VAR4=$VAR4"
```

à peaufiner mais ça fonctionne

---

<div class="post-metadata">

**Author:** ![eric0279](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/94ad74/32.png) [@eric0279](https://www.debian-fr.org/u/eric0279)\
**Post date:** [Février 21, 2016, 8:39 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/15 "2016-02-21T20:39:57Z")

</div>

@Flavien:

> [@](#):
>
> serveur@debian:~$ LOL=`cat file.tmp`  
> serveur@debian:~$ for variable in $LOL
> 
> > do  
> > eval valeur=$$variable  
> > echo «&nbsp;lol: $variable&nbsp;»  
> > if test -z «&nbsp;$valeur&nbsp;»  
> > then  
> > echo «&nbsp;ERREUR: La variable $variable est actuellement vide&nbsp;»  
> > fi  
> > done  
> > lol: «&nbsp;NETWORK&nbsp;»  
> > lol: «&nbsp;SRCDS\_USER&nbsp;»  
> > lol: «&nbsp;SRCDS\_FOLDER\_NAME&nbsp;»  
> > lol: «&nbsp;SRCDS\_SCREEN&nbsp;»  
> > lol: «&nbsp;SRCDS\_GAME\_NAME&nbsp;»  
> > lol: «&nbsp;SRCDS\_IP&nbsp;»  
> > lol:   
> > lol: «&nbsp;SRCDS\_TICKRATE&nbsp;»  
> > lol: «&nbsp;SRCDS\_APP&nbsp;»  
> > lol: «&nbsp;CLIENT\_APPID&nbsp;»  
> > lol: «&nbsp;SRCDS\_STEAM\_FILES&nbsp;»  
> > lol: «&nbsp;SRCDS\_SVPURE&nbsp;»  
> > lol: «&nbsp;SRCDS\_MAXPLAYERS&nbsp;»  
> > lol:   
> > lol: «&nbsp;SRCDS\_MAPCYCLE&nbsp;»  
> > lol: «&nbsp;SRCDS\_PORT&nbsp;»  
> > lol: «&nbsp;SRCDS\_MAP&nbsp;»  
> > lol: «&nbsp;SRCDS\_BACKUP&nbsp;»  
> > lol: «&nbsp;SRCDS\_SERVERCFG&nbsp;»  
> > lol: «&nbsp;SRCDS\_GAMETYPES&nbsp;»  
> > lol:   
> > lol: «&nbsp;SRCDS\_MODETYPES&nbsp;»  
> > lol: «&nbsp;SRCDS\_MAPTYPES&nbsp;»  
> > lol: «&nbsp;SRCDS\_USERCON&nbsp;»  
> > lol: «&nbsp;SRCDS\_MAXOVERRIDE&nbsp;»  
> > lol: «&nbsp;SRCDS\_NOTV&nbsp;»  
> > lol: «&nbsp;SRCDS\_BIN&nbsp;»  
> > lol:   
> > lol: «&nbsp;SRCDS\_DIR\_STEAMCMD&nbsp;»  
> > lol: «&nbsp;SRCDS\_STEAMCLIENT&nbsp;»  
> > lol: «&nbsp;SRCDS\_STEAMCMD\_BIN&nbsp;»  
> > lol: «&nbsp;SRCDS\_STEAM\_LOGIN&nbsp;»  
> > lol: «&nbsp;SRCDS\_FORCE\_DIR&nbsp;»  
> > lol: «&nbsp;DIR\_LOGS&nbsp;»  
> > lol:   
> > lol: «&nbsp;UPDATE\_EMAIL&nbsp;»  
> > lol: «&nbsp;UPDATE\_RETRY&nbsp;»  
> > lol: «&nbsp;SRCDS\_SOURCETV&nbsp;»  
> > lol: «&nbsp;SRCDS\_TVPORT&nbsp;»  
> > lol: «&nbsp;SRCDS\_DEBUG&nbsp;»  
> > lol: «&nbsp;SCRIPT\_DEBUG&nbsp;»

J’ai essayé en mettant eval valeur=$$variable entre «&nbsp;&nbsp;», aucun changement.

---

<div class="post-metadata">

**Author:** ![eric0279](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/94ad74/32.png) [@eric0279](https://www.debian-fr.org/u/eric0279)\
**Post date:** [Février 21, 2016, 8:40 UTC](https://www.debian-fr.org/t/verifier-variables-dun-fichier-de-conf/63150/16 "2016-02-21T20:40:06Z")

</div>

[quote=“agentsteel”][quote=“MisterFreez”]A vu de nez :

[code]# Write error message on stderr and die  
function die() {  
echo “$@” \>&2  
exit 1  
}

# Load var from properties files

function load() {  
for propertie in “$@” ; do  
[[-f “${propertie}”]] || die "load() : “${propertie}” don’t exist !“  
while read ; do  
[[-n “${REPLY%%=_}" && -z "${REPLY#_=}”]] || die “load() : La variable “${REPLY%%=_}" est vide !"  
eval "${REPLY%%=_}”=’”${REPLY#\*=}”'  
done \< "${propertie}"  
done  
}[/code][/quote]

Testé et corrigé une petite erreur :

fichier test.conf

```auto
VAR1="hello"
VAR2="youhou"
VAR3="13456"
VAR4=
```

le script

```auto
#!/bin/bash

# Write error message on stderr and die
function die() {
  echo "$@" >&2
  exit 1
}

# Load var from properties files
function load() {
  for propertie in "$@" ; do
    [[-f "${propertie}"]] || die "load() : \"${propertie}\" don't exist !"
    while read ; do

#echo "${REPLY%%=*}"
#echo "${REPLY#*=}"

      [[-n "${REPLY%%=*}" && -z "${REPLY#*=}"]] && die "load() : La variable \"${REPLY%%=*}\" est vide !"
      eval "${REPLY%%=*}"=\'"${REPLY#*=}"\'
    done < "${propertie}"
  done
}

load "test.conf"

echo "VAR1=$VAR1"
echo "VAR2=$VAR2"
echo "VAR3=$VAR3"
echo "VAR4=$VAR4"
```

à peaufiner mais ça fonctionne[/quote]

ou pas… La ligne 19 retourne une commande introuvable (eval…)

edit:  
J’ai modifié ma variable LOL en :

```auto
FICHIER=$(eval echo $(cat file.tmp))
```

après de multiples tests, tout fonctionne à merveille.
