• # compléments d'explication

    Posté par (site web personnel) . En réponse au message lecture d'un fichier. Évalué à 1.

    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 :-)