Willkommen!

Willkommen auf der privaten Webseite von Axel Hahn.

Axels Blog

Bash: Ini Dateien Parsen/ Lesen

08.06.2018 - 23:43

Bei einigen Servern habe ich einen Cronjob, der ruft ein Shellskript auf, welches den IST Zustand einiger Dienste auflistet. Also, auf einem Server, welche Mysql- und Postgres-Datenbankschemata es gibt, auf dem nächsten welche Apache VHosts exitieren und auf dem Fileserver welche Samba-Shares usw.
Schlussendlich landet es auf einem Wiki (Dokuwiki in diesem Fall - hier sind die Seiten Txt-Dateien im Filesystem - das macht die Sache sehr einfach).

Beim Samba Server war es bis anhin recht unschön, weil umständlich gecodet. Nun habe ich 3 kleine Funktionen hinzugefügt, mit denen ich (endlich :-)) eine INI Datei parsen kann.
Die Funktionen kann man in eine Datei mit Leserechten (ohne Execute-Recht) auslagern, die man im Skript sourct (per source oder Punkt-Kommando).

  1. _getInisections [Name der Ini-Datei]
    listet alle Sektionstitel auf
  2. _getInisectiondata [Name der Ini-Datei] [Name der Sektion]
    listet die angegebene Sektion auf. Mit dieser Ausgabe sieht man eine Sektion alleinstehend - und kann sich die Variablen herausziehen … aber wenn man die Variablen kennt, gibt es noch die nächste Funktion
  3. _getIniValue [Name der Ini-Datei] [Name der Sektion] [Name der Variable]
    gibt den Wert einer Variable aus der angegebenen Sektion zurück

In der Samba-Konfiguration (/etc/samba/smb.conf) sind die Variablen und Werte nicht zwingend ab Zeilenanfang - daher sind manche Regex ein wenig lasch. Aber wenn man die Idee erkennt, ist auch dies schnell angepasst.

# Helper for ini files: get all sections
# param1 - name of the ini file
function _getInisections(){
        myfile=$1
        grep "^[" $myfile | sed 's,^[,,' | sed 's,],,'
}

# Helper for ini files: get all content inside a section
# param1 - name of the ini file
# param2 - name of the section in ini file
function _getInisectiondata(){
        myfile=$1
        mysection=$2
        sed -e "1,/[${mysection}]/ d" -e '/[/,$ d' $myfile | grep -v "#"
}
 
# Helper for ini files: get a value of a variable in a given section
# param1 - name of the ini file
# param2 - name of the section in ini file
# param3 - name of the variable to read
function _getIniValue(){
        myfile=$1
        mysection=$2
        myvarname=$3
        _getInisectiondata ${myfile} ${mysection} | grep "${myvarname}.*=.*" | cut -f 2 -d "="
}

Und als Anwendungsbeispiel: ein Snippet mit einem Loop über die Samba-Konfiguration. Ausgegeben wird eine Tabelle mit Name des Shares, Beschreibung (Wert “comment”) und Pfad des Shares (Wert “path”):

smbconf=/etc/samba/smb.conf

# Ausgabe des Tabellen-Header in Wiki-Syntax
echo "^Share^Kommentar^Pfad^"

# Loop ueber alle Sektionen
for mysection in `_getInisections $smbconf | grep -v global`
do
        # Ini-Werte aus der Sektion lesen
        myComment=`_getIniValue ${smbconf} ${mysection} "comment"`
        mypath=`_getIniValue ${smbconf} ${mysection} "path"`

        # Ausgabe der Tabellen-Zeile - Pipes sind Spaltentrenner
       echo "|${mysection}|${myComment}|${mypath}|"
done

Blog-Kategorieen: Allgemein Programmierung Shell


die letzten Blog-Einträge:
08.06.2018-23:43 Uhr Bash: Ini Dateien Parsen/ Lesen
28.04.2018-13:51 Uhr Song: Space & Time
25.03.2018-16:46 Uhr adb - Kopieren von Dateien auf ein Android Smartphone - auch ohne OS
04.03.2018-18:30 Uhr 20 Jahre Opensource - Check an unserem Institut
23.02.2018-19:02 Uhr Html5 Audio Events beobachten

Statistisches



Herkunft der Besucher

Übersicht der Herkunftsländer der Besucher meiner Webseite. Bots von Suchmaschinen sind in dieser Liste ausgeschlossen.

Übersicht der Herkunftsländer der Besucher meiner Webseite. Bots von Suchmaschinen sind in dieser Liste ausgeschlossen.


Webbrowser meiner Besucher

Welche Webbrowser werden verwendet? Die Anzeige fasst alle Versionsnummern zusammen.

Welche Webbrowser werden verwendet? Die Anzeige fasst alle Versionsnummern zusammen.