Skip to end of metadata
Go to start of metadata

LoxBerry 1.0

LoxBerry 1.0.3

This function is available starting with LoxBerry V1.0.3. If you use that function, set this minimum version in your plugin.cfg.

LoxBerry 1.0 liefert den iniparser, wie er darunter beschrieben ist, mit.

Folgendermaßen kann er verwendet werden:

#!/bin/bash

# Source the iniparser
. $LBHOMEDIR/libs/bashlib/iniparser.sh

iniparser $LBSCONFIG/general.cfg "BASE"

echo "Current LoxBerry version is $BASEVERSION\n"
echo "You have a count of $BASEMINISERVERS configured\n"

Es werden alle Variablen der angegebenen Section (hier: BASE) gelesen und als Variable zusammengefügt. Die VERSION in der Section [BASE] wird zur Variable $BASEVERSION.

LoxBerry <V1.0

Lösung vorgeschlagen von Andreas Weber

# ini parser from https://www.joedog.org/2015/02/13/sh-script-ini-parser/
# and http://mark.aufflick.com/blog/2007/11/08/parsing-ini-files-with-sed
iniparser() {
    INI_FILE=$1
    INI_SECTION=$2
    eval `sed -e 's/[[:space:]]*\=[[:space:]]*/=/g' \
        -e 's/;.*$//' \
        -e 's/[[:space:]]*$//' \
        -e 's/^[[:space:]]*//' \
        -e "s/^\(.*\)=\([^\"']*\)$/$INI_SECTION\1=\"\2\"/" \
        < $INI_FILE \
        | sed -n -e "/^\[$INI_SECTION\]/,/^\s*\[/{/^[^;].*\=.*/p;}"`
}

iniparser configfilename.cfg "BASE"

Diese Lösung wird auch von LoxBerry beim Systemstart eingesetzt.

Die ini_parser Funktion muss vor dem eigentlichen Parse-Aufruf im Code stehen.

Beispiel einer Config:

[MAIN]
ConfigVersion=1
enabled=true
port=19579

Das ergibt die Variablen $MAINSection, $MAINConfigVersion, $MAINenabled und $MAINport.

Alternativ, funktioniert nur mit Bash

Lösung von http://stackoverflow.com/a/20815951/3466839 (INI-Sections für LoxBerry hinzugefügt), in Verwendung im ALSA Tools Plugin im daemon.

Configfile parsen
# Config file parsing (based on http://stackoverflow.com/a/20815951/3466839)
shopt -s extglob
configfile="/opt/loxberry/config/system/general.cfg" # set the actual path name of your (DOS or Unix) config file
tr -d '\r' < $configfile > $configfile.unix
while IFS='= ' read lhs rhs
do
    if [[ ! $lhs =~ ^\ *# && -n $lhs ]]; then
        rhs="${rhs%%\#*}"    # Del in line right comments
        rhs="${rhs%%*( )}"   # Del trailing spaces
        rhs="${rhs%\"*}"     # Del opening string quotes
        rhs="${rhs#\"*}"     # Del closing string quotes
        if [[ $lhs =~ ^\[ ]]; then # Set INI-like sections, e.g. [MAIN]
          lhs="${lhs%\]*}"     # Del opening bracket
          lhs="${lhs#\[*}"     # Del closing bracket
          sec=$lhs
        else
          if [[ ! $lhs =~ ^\; ]]; then # Don't parse comments startet with ;
            name="$sec$lhs"
            declare ${name}="$rhs"
            #echo "$name = $rhs" # for debugging only
          fi
        fi
    fi
done < $configfile.unix
rm $configfile.unix > /dev/null 2>&1
# Config file parsing end

Jede Config-Variable wird als Bash-Variable angelegt. Die Bereiche aus Config::Simple werden dabei vor den Variablennamen gestellt.

Das ergibt die Variablen $MAINSection, $MAINConfigVersion, $MAINenabled und $MAINport.

  • No labels

2 Comments

  1. Eine Variante die - weniger generisch - aber dafür nicht auf bash angewiesen ist:


    # ini parser from https://www.joedog.org/2015/02/13/sh-script-ini-parser/
    # and http://mark.aufflick.com/blog/2007/11/08/parsing-ini-files-with-sed
    ini_parser() {

        INI_FILE=$1
        INI_SECTION=$2

        eval `sed -e 's/[[:space:]]*\=[[:space:]]*/=/g' \
            -e 's/;.*$//' \
            -e 's/[[:space:]]*$//' \
            -e 's/^[[:space:]]*//' \
            -e "s/^\(.*\)=\([^\"']*\)$/$INI_SECTION\1=\"\2\"/" \
            < $INI_FILE \
            | sed -n -e "/^\[$INI_SECTION\]/,/^\s*\[/{/^[^;].*\=.*/p;}"`

    }

    ini_parser configfilename "Main"

    Das ergibt die Variablen $MainConfigVersion, $Mainenabled und $Mainport.

  2. So gehts noch einfacher

    apt-get install crudini

    ms=1

    msip=$(crudini --get /opt/loxberry/config/system/general.cfg MINISERVER$ms IPADDRESS)
    msuser=$(crudini --get /opt/loxberry/config/system/general.cfg MINISERVER$ms ADMIN)
    mspw=$(crudini --get /opt/loxberry/config/system/general.cfg MINISERVER$ms PASS)
    msport=$(crudini --get /opt/loxberry/config/system/general.cfg MINISERVER$ms PORT)
    msname=$(crudini --get /opt/loxberry/config/system/general.cfg MINISERVER$ms NAME)