Fehlende Argumente bei getopts

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Robby-TX5, 29.01.2009.

  1. #1 Robby-TX5, 29.01.2009
    Zuletzt bearbeitet: 29.01.2009
    Robby-TX5

    Robby-TX5 Grünschnabel

    Dabei seit:
    16.01.2009
    Beiträge:
    4
    Zustimmungen:
    0
    Hi,

    ich mmuss beim Programmaufruf mehrere Parameter angeben. Mit getops überprüfe ich die Argumente, die zwingend sind. Wenn ich ein Argument weglasse, macht getopt - entgegen allen Howtos - weiter. Ein beispiel:

    Code:
    function fnStart
    {
    set -x
    EINGABE=`getopt -o N:S:n:  -n 'example.bash' -- "$@"`
    
    [[ $? != 0 ]] &&  { echo "Terminating..." >&2 ; exit 1 ; }
    
    eval set -- "${EINGABE}"
    
    while true; do
    
       case "$1" in
         -N) Name="$2" ; shift 2 ;;
         -S) Strasse="$2" ; shift 2 ;;
         -n) Nummer="$2" ; shift 2 ;;
         --) shift; break ;;
         *) echo "alles falsch hier"
            exit 101 ;;
       esac
    done
    
    Wird diese Funktion nur mit "-S" aufgerufen ohne Angabe eines Argumentes, dann kommt ein ordentliche Fehlermeldung:

    Code:
    ./parsing.sh -S
    Remaining arguments:
    --> `-S'
    ++ getopt -o S:M:N: -n example.bash -- -S
    example.bash: Diese Option benötigt ein Argument -- »S«
    
    Einfunktionsaufruf mit "-N -S Hautpstraße" macht folgendes:

    Code:
     ./parsing.sh -N -S Hautpstrasse
    Remaining arguments:
    --> `-N'
    --> `-S'
    --> `Hautpstrasse'
    ++ getopt -o N:S:n: -n example.bash -- -N -S Hautpstrasse
    + EINGABE=' -N '\''-S'\'' -- '\''Hautpstrasse'\'''
    + [[ 0 != 0 ]]
    + eval set -- ' -N '\''-S'\'' -- '\''Hautpstrasse'\'''
    ++ set -- -N -S -- Hautpstrasse
    + true
    + case "$1" in
    + NAME=-M
    
    Kurzum; meine Funktion erkennt nicht, dass ein Argument weggelassen wurde und "füllt" stattdessen mit der nächsten Option auf. Damit werden natürlich alle nachfolgenden Fehlerroutinen unterlaufen.

    Ich bin für jeden Tipp dankbar.

    Robby
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Hi,

    mittlerweile habe ich rausgefunden, dass mein Problem wohl die Schwachstelle des "getopt" ist. Meine Lösung: ich untersuche den String der Variable $2 auf negative Vorzeichen. Damit funktioniert das halbwegs sauber, solange der DAU nicht versucht Namen mit einem vorangestellten "-" einzugeben.

    Code:
    [[ $(echo "$2" | cut -c1) = "-" ]] && { printf "\n Fehlendes Argument fuer Paramter \"$1\" \n" ; fnSyntax ; }
    
    Wenn noch jemand eine bessere Idee hat, immer raus damit. ;-)

    Robby
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Fehlende Argumente bei getopts

Die Seite wird geladen...

Fehlende Argumente bei getopts - Ähnliche Themen

  1. Niederländische Konsumentenvereinigung verklagt Samsung wegen fehlender Android-Updates

    Niederländische Konsumentenvereinigung verklagt Samsung wegen fehlender Android-Updates: Die niederländischen Verbrauerschützer vom »Consumentenbond« haben Samsung verklagt, um den Hersteller zu zwingen, seine Smartphones zeitgerecht...
  2. Samba net ads (fehlender Service im KDC)

    Samba net ads (fehlender Service im KDC): Wertes Team, ich möchte euch/sie um Unterstützung bei folgendem Problem bitten: Ein RHEL5 (mit Samba 3.6.6) Client sollte mit Apache und...
  3. fehlende Firmware, aber was jetzt genau?

    fehlende Firmware, aber was jetzt genau?: Hallo Community, bei der Installation von Debian Wheezy verlangt das System folgende, fehlende Firmware: brcm/bcm43xx-0.fw rtl_nic/rtl8168d-2.fw...
  4. Fehlende Partitionen unter "Orte" in KDE

    Fehlende Partitionen unter "Orte" in KDE: Hallo, in den letzten Tagen bin ich von Ubuntu auf KUbuntu umgestiegen, da unity echter Müll ist :D. Leider habe ich jetzt festgestellt, dass bei...
  5. Debian 6, fehlendes /dev/ttyI6 für vbox (NICHT virtualbox!)

    Debian 6, fehlendes /dev/ttyI6 für vbox (NICHT virtualbox!): Hallo Leute! Ich habe ein neues Debian 6.0.2 aufgesetzt. HW mit einer externen Fritz!Card USB V2.1. Damit möchte ich u.a. einen...