Bon désolé de ne pas avoir été clair dès le début, mais je ne voulais pas compliquer. Je vais donc expliquer plus en détail mon problème.
Le fichier que je dois lire est un fichier de config qui ressemble à ça (il peut contenir des lignes vides) :
# Serveur ou sera enregistree la sauvegarde
serveur : monserveur.fr
# Nom de connexion a utiliser sur le serveur
usager : toto
# Chemin abslou du repertoire ou sont enregistrees les sauvegardes sur le serveur
chemin : /sauvegardes
# Chemin abslou du repertoire ou sont enregistres les fichiers d'erreurs
chemin_err : /sauvegardes/ERREURS
# Identifiant du client :
id : 1
# Liste des fichiers a sauvegarder :
sauv : /root
sauv : /home/toto
sauv : /etc
Je dois récupérer toutes les options (serveur, usager...) et les enregistrer dans des variables.
Mon script actuel ressemble à ça :
# Lecture du fichier de configuration
sed 's/ *\#.*//' fichier_config | egrep -v '^$' | while read ligne ; do # Lecture du fichier de configuration (et suppression des commentaires).
echo $ligne
if echo $ligne | egrep '^[ ]*sauv[ ]*:[ ]*.+$' >/dev/null ; then
sauv=${sauv}\n$(echo $ligne | sed -n 's/^[ ]*sauv[ ]*:[ ]*//p')
elif echo $ligne | egrep '^[ ]*serveur[ ]*:[ ]*.+$' >/dev/null ; then
serveur=$(echo $ligne | sed 's/^[ ]*serveur[ ]*:[ ]*//')
elif echo $ligne | egrep '^[ ]*usager[ ]*:[ ]*.+$' >/dev/null ; then
usager=$(echo $ligne | sed 's/^[ ]*usager[ ]*:[ ]*//')
elif echo $ligne | egrep '^[ ]*chemin[ ]*:[ ]*.+$' >/dev/null ; then
chemin=$(echo $ligne | sed '{ s/^[ ]*chemin[ ]*:[ ]*// ; s@/[ ]*$@@ }') # On supprime a la fois "chemin : " et le dernier / s'il existe.
elif echo $ligne | egrep '^[ ]*chemin_err[ ]*:[ ]*.+$' >/dev/null ; then
chemin_err=$(echo $ligne | sed '{ s/^[ ]*chemin_err[ ]*:[ ]*// ; s@/[ ]*$@@ }') # On supprime a la fois "chemin : " et le dernier / s'il existe.
elif echo $ligne | egrep '^[ ]*id[ ]*:[ ]*.+$' >/dev/null ; then
id=$(echo $ligne | sed 's/^[ ]*id[ ]*:[ ]*//')
fi
done
# C'est là que ça coince :
echo "serveur = $serveur"
echo "usager = $usager"
echo "fich_err = $fich_err"
echo "id = $id"
echo "chemin = $chemin"
echo "chemin_err = $chemin_err"
echo "dest = $dest"
echo "sauv = $sauv"
Donc j'ai plusieurs valeurs à récupérer dans la boucle, et avec vos solutions je ne vois pas comment faire. C'est peut-être faisable en perl mais je ne connais pas le perl...
Voili voilou, merci de votre aide :-)
# compléments d'explication
Posté par Naha (site web personnel) . En réponse au message lecture d'un fichier. Évalué à 1.
# Lecture du fichier de configuration sed 's/ *\#.*//' fichier_config | egrep -v '^$' | while read ligne ; do # Lecture du fichier de configuration (et suppression des commentaires). echo $ligne if echo $ligne | egrep '^[ ]*sauv[ ]*:[ ]*.+$' >/dev/null ; then sauv=${sauv}\n$(echo $ligne | sed -n 's/^[ ]*sauv[ ]*:[ ]*//p') elif echo $ligne | egrep '^[ ]*serveur[ ]*:[ ]*.+$' >/dev/null ; then serveur=$(echo $ligne | sed 's/^[ ]*serveur[ ]*:[ ]*//') elif echo $ligne | egrep '^[ ]*usager[ ]*:[ ]*.+$' >/dev/null ; then usager=$(echo $ligne | sed 's/^[ ]*usager[ ]*:[ ]*//') elif echo $ligne | egrep '^[ ]*chemin[ ]*:[ ]*.+$' >/dev/null ; then chemin=$(echo $ligne | sed '{ s/^[ ]*chemin[ ]*:[ ]*// ; s@/[ ]*$@@ }') # On supprime a la fois "chemin : " et le dernier / s'il existe. elif echo $ligne | egrep '^[ ]*chemin_err[ ]*:[ ]*.+$' >/dev/null ; then chemin_err=$(echo $ligne | sed '{ s/^[ ]*chemin_err[ ]*:[ ]*// ; s@/[ ]*$@@ }') # On supprime a la fois "chemin : " et le dernier / s'il existe. elif echo $ligne | egrep '^[ ]*id[ ]*:[ ]*.+$' >/dev/null ; then id=$(echo $ligne | sed 's/^[ ]*id[ ]*:[ ]*//') fi done # C'est là que ça coince : echo "serveur = $serveur" echo "usager = $usager" echo "fich_err = $fich_err" echo "id = $id" echo "chemin = $chemin" echo "chemin_err = $chemin_err" echo "dest = $dest" echo "sauv = $sauv"Donc j'ai plusieurs valeurs à récupérer dans la boucle, et avec vos solutions je ne vois pas comment faire. C'est peut-être faisable en perl mais je ne connais pas le perl... Voili voilou, merci de votre aide :-)