Thema geschlossen
Ergebnis 1 bis 5 von 5

Thema: Config Parser für bash-Scripte

  1. #1
    Lehrling Avatar von BongoKarl
    Registriert seit
    14.08.2006
    Ort
    Markdorf
    Beiträge
    26

    Standard Config Parser für bash-Scripte

    Moin zusammen,

    Ich bin grade dabei mein Backup-Script ein bischen zu optimieren, und dabei wäre es sehr praktisch wenn man einen vorgefertigten Config-Parser hätte der einem ein paar kleine Einstellungen schon von vorneherein abnimmt, also eine Datei im folgenden Format einlesen und daraus Variablen machen kann:

    Code:
    [Folder]
    Source=/home/...
    Destination=/var/backup/...
    
    [MySQL]
    Database=test
    Destination=/var/backup/...
    
    ...
    
    Hat jmd schon mal sowas gemacht bzw. benutzt?

    MFG BongoKarl
    Die Antwort ist 42!

  2. #2
    Lehrling
    Registriert seit
    08.08.2006
    Beiträge
    226

    Standard AW: Config Parser für bash-Scripte

    Parsen könntest du die Konfigurationsdatei mit awk.
    Beispiel: Thema anzeigen - Hilfe bei der Umsetzung gesucht. Anwendung am entstehen... ? - SuSE Linux

    Aber warum so kompliziert?

    ~/bckp_config.sh
    Code:
    ### Folder ###
    F_SORCE=/home/...
    F_DEST=/var/backup/...
    
    ### MySQL ###
    MY_DB=test
    MY_DEST=/var/backup/...
    
    ~/bckp_script.sh
    Code:
    #!/bin/sh
    
    # source config
    . ~/bckp_config.sh
    # oder
    source ~/bckp_config.sh
    
    # print variables
    
    echo "$F_SORCE";
    echo "$F_DEST";
    echo "$MY_DB";
    echo "$MY_DEST";
    
    Gruß b3ll3roph0n
    --
    Denken hilft !

    Für alle meine Beiträge gelten, außer bei Zitaten, die Creative Commons.

  3. #3
    Lehrling Avatar von BongoKarl
    Registriert seit
    14.08.2006
    Ort
    Markdorf
    Beiträge
    26

    Standard AW: Config Parser für bash-Scripte

    ok eigentlich hatte ich eher gedacht das da am schluss arrays zurückkommen mit denen ich dann arbeite, vielleicht unklar ausgedrückt


    und ich wollte mehrere Folder in einer Datei definieren...wenn ich das auf die von dir vorgeschlagene Art mache dann muss ich wieder für jeden Ordner ne Sonderbehandlung einführen...

    Alternative mit deinem Vorschlag dann für jedes Verzeichniss eine eigene Konfiguration...

    nun ich denke ich werde mich in diesem Fall mal wieder n bischen mit awk rumschlagen...
    Die Antwort ist 42!

  4. #4
    Lehrling
    Registriert seit
    08.08.2006
    Beiträge
    226

    Standard AW: Config Parser für bash-Scripte

    Dann müsstest du alle Zeilen herausfiltern, die nicht "Leer" sind oder mit "[" beginnen (die Syntax in deinem Beispiel vorrausgesetzt) und dann die die Werte nach dem "=" in ein Array einlesen.

    Mal das Beispiel (s.o.) anschauen - da wird eine Channelliste ähnlich eingelesen (function parseSfile).
    Gruß b3ll3roph0n
    --
    Denken hilft !

    Für alle meine Beiträge gelten, außer bei Zitaten, die Creative Commons.

  5. #5
    Lehrling Avatar von BongoKarl
    Registriert seit
    14.08.2006
    Ort
    Markdorf
    Beiträge
    26

    Standard AW: Config Parser für bash-Scripte

    ok...ich hab ein bischen gescriptet und vielleicht interessiert sich ja mal jmd dafür

    Das Script liest bis jetzt nur die Config ein und gibt aus in welchem Abschnitt es steht, die Implementierung vom Rest (des Backups) muss noch gemacht werden (wenns jmd interessiert werde ich das auch hier posten^^)

    backup.sh
    Code:
    # Init
    CONFIG="/etc/backup/backup.conf"
    
    # Initialisierung der Case-Variable
    type="INIT"
    
    # Counter initialisieren
    declare -i cntFol=0
    declare -i cntMySQL=0
    declare -i cntPostgres=0
    
    # Arrays initialisieren
    declare -a folders
    declare -a mysql
    declare -a postgres
    # nutze exec um die Subshell zu vermeiden
    exec 3<>$CONFIG
    # lese Datei zeilenweise
    while read line <&3; do
      if [ 1 -eq `echo $line | grep "\["[a-zA-Z0-9]*"\]" -c` ]; then
        type=`echo $line | sed s/[\]\[]/""/g`
        echo "$type gefunden..."
      else
        # Auf Leerzeilen ueberpruefen
        if [ ! -z $line ]; then
          case "$type" in
            Folders)
              # Ordner behandeln
              echo "in Folders"
              ;;
            PostgreSQL)
              # PostgreSQL-DBs behandeln
              echo "in Postgres"
              ;;
            MySQL)
              # MySQL-DBs behandeln
              echo "in Mysql"
              ;;
            *)
              # Nix zu tun
              ;;
          esac
        fi
      fi
    done
    exec 3>&-
    
    Es können ohne weiteres neue Abschnitte definiert werden, es muss dann nur eine Behandlung im Case erstellt werden.
    z.B.:
    Code:
    ...
    case $type in
    ...
      SVN)
        # SVN behandeln
        ;;
    ...
    

    backup.conf
    Code:
    [Folders]
    /home/bongokarl
    /home/fuzzie
    [MySQL]
    bongokarl1
    bongokarl2
    [PostgreSQL]
    fuzzie1
    fuzzie2
    
    PS: Falls das jmd benutzen will kann er das gerne tun aber auf eigene Verantwortung
    Geändert von BongoKarl (11.04.2007 um 10:51 Uhr)
    Die Antwort ist 42!

Thema geschlossen

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87