Config Parser für bash-Scripte

Status
Für weitere Antworten geschlossen.

BongoKarl

New Member
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
 
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";
 

BongoKarl

New Member
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...
 
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).
 

BongoKarl

New Member
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 ;)
 
Status
Für weitere Antworten geschlossen.
Oben