R
Robby-TX5
Grünschnabel
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:
Wird diese Funktion nur mit "-S" aufgerufen ohne Angabe eines Argumentes, dann kommt ein ordentliche Fehlermeldung:
Einfunktionsaufruf mit "-N -S Hautpstraße" macht folgendes:
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.
Wenn noch jemand eine bessere Idee hat, immer raus damit. ;-)
Robby
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
Zuletzt bearbeitet: