Kombination von Optionen prüfen



  • Hallo,

    wir programmieren in der Uni derzeit ein script unter bash um log-files auswerten zu können. Nun dürfen manche Optionen nicht mit anderen gesetzt werden.
    Beispielsweise soll beim Aufruf "BEFEHL -h" die Hilfe aufgerufen werden und darf nicht mit anderen Optionen kombiniert werden.
    Momentan prüfe ich das so:

    if test "$OPT_F"; then
    	if test "$OPT_H"; then
    		echo "$PROG: Hilfe darf nicht mit der Optionen -f verwendet werden." >&2
    		ERROR=1
    		elif test "$OPT_M"; then
    		ERROR=1
    		echo "$PROG: Manual darf nicht mit der Optionen -f verwendet werden.">&2
    	fi
    fi
    

    Und das für alle Kombinationen die nicht erlaubt sind, resultierend daraus sind ca. 100 Zeilen code nur dafür 😞

    Nun war meine Idee, ob ich das per logischen Verknüfungen oder pipelines verkürzen kann ?
    Beispiel:

    if test "$OPT_F" && test "$OPT_H"; then
    		echo "$PROG: Hilfe darf nicht mit der Optionen -f verwendet werden." >&2
    		ERROR=1		
    fi
    

    So etwa. Funktioniert so aber nicht, hat da jemand eine Idee ?

    Gruss,
    Lalas



  • Ich schieb den mal nach oben;

    Hat vielleicht noch jemand eine Idee, ob ich da irgendwie was verbessern kann ?

    Gruss,
    Lalas



  • $OPT_H zuerst abtesten, dann denn hilfetext ausgeben und script beenden. that's it.
    mehr will man ja dann auch gar nicht sehen.
    da brauchst du nach den anderen optionen erst gar nicht mehr zu checken.



  • Okay, allerdings gibt es auch andere Kombinationen, also z.B. darf nicht -d und -f usw.
    Das sind gesamt 9 Kombinationen die nicht erlaubt sind.

    Bei -h stimme ich zu, einfach 'exit' nach der Ausgabe der Hilfe. Aber wie prüfe ich das am geschicktesten, Beispiel:

    -d darf mit -s -k, aber nicht mit -f -m -t

    Ich hoffe es ist verständlich wie ich es meine...

    Gruss,
    Lalas



  • wenn es nur 9 Kombinationen gibt, die nicht erlaubt sind, kannst du die doch im Vorfeld ausschließen:

    test "{OPT\_F}" && test "{OPT_H}" && echo "is nich"
    .
    .
    .
    test "{OPT\_Z}" && test "{OPT_Y}" && echo "pech"

    und dann die erlaubten Kombinationen verarbeiten.



  • u_ser-l schrieb:

    wenn es nur 9 Kombinationen gibt, die nicht erlaubt sind, kannst du die doch im Vorfeld ausschließen:

    test "{OPT\_F}" && test "{OPT_H}" && echo "is nich"
    .
    .
    .
    test "{OPT\_Z}" && test "{OPT_Y}" && echo "pech"

    und dann die erlaubten Kombinationen verarbeiten.

    Oder noch kürzer:

    [ -n "$OPT_F" && -n "$OPT_H" ] && { echo "falsch!"; exit 1 }
    [ -n "$OPT_Z" && -n "$OPT_Y" ] && { echo "auch falsch!"; exit 1 }
    

    Oder auch:

    if [ "$OPT_F" -a "$OPT_H" \
      -o "$OPT_Z" -a "$OPT_Y" ]
    then
      echo "falsch!"
      exit 1
    fi
    

    Statt "if [...] then" geht natürlich auch wieder "[..] && { ... }". Ich finde es aber mit if lesbarer. Du kannst auch Klammern verwenden, um komplexere logische Ausdrücke zu erstellen, aber auch das trägt nicht unbedingt zur Übersichtlichkeit bei.


Anmelden zum Antworten