PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BASH getopts



Hans-Georg Normann
10-02-2006, 16:17
Wie ich Kurzparameter mit getopts auslese, habe ich ja mittlerweile hinbekommen und Begriffen. Aber wie funktioniert das mit der Langform? Nehmen wir mal an, ich möche -i <parameter> als --input=<parameter> und -o <parmeter> als --output <parameter> screiben können.

Hier der Auszug um die Kurzform zu ermitteln
while getopts ':i:o:m:d:hvw' OPTION ; do
case $OPTION in
i) ORIG_EXT=$OPTARG;;
o) DEST_EXT=$OPTARG;;
d) FILE_DIR=$OPTARG;;
m) MAX_DEPTH=$OPTARG;;
h) usage $EXIT_SUCCESS;;
v) VERBOSE=true;;
w) usage $EXIT_SUCCESS;;
\?) echo "Unbekannte Option \"-$OPTARG\"." >&2
usage $EXIT_ERROR;;
:) echo "Option \"-$OPTARG\" benötigt ein Argument." >&2
usage $EXIT_ERROR;;
*) echo "Dies kann eigentlich nicht passiert sein ...\"$OPTION\"... " >&2
usage $EXIT_BUG;;
esac
done

Joghurt
10-02-2006, 18:14
IIRC kann getopts das nicht. Dafür musst du das externe (aber mehr oder weniger Standard bei Linuxinstallationen) Programm getopt nehmen.
man getopt

Hans-Georg Normann
10-02-2006, 23:19
Dann hätte ich hier nicht gefragt! Ich seh immer nur Beispiele zur Kurzform. Vielleicht brauch ich aber auch nur ne neue Brille;)

Joghurt
11-02-2006, 00:46
Wofür jetzt Beispiele? Für getopt (ohne s) oder den bash-internen getopts?

Letzterer, den du im Moment benutzt, kann glaube ich keine langen Optionen.

Hans-Georg Normann
11-02-2006, 19:48
Weiss nicht ob getopt lange optionen kann. Aber ich habe da etwas gelesen, als wenn getopt als depricated gekennzeichnet ist. Wenn man etwas neues anfängt, dann sollte man sich mit alten Kamellen gar nicht mehr herum schlagen. Reicht wenn man alten sourcecode lesen kann.

Joghurt
12-02-2006, 15:09
Woher hast du die Info, dass getopt deprecated ist? (Kann ja gut sein)

getopts kann jedenfalls keine langen Argumente. Also entweder selbst programmieren oder getopt nutzen.

Hans-Georg Normann
12-02-2006, 19:02
Sorry "depricated" ist wahrscheinlich der falsche Ausdruck. "Veraltet" wäre wohl angebrachter! Ich bezieh mich da auf diesen Artikel (http://kris.koehntopp.de/artikel/unix/shellprogrammierung/slide013.html), Kapitel 1.11.4

Nach soviel Konfusion weiß ich jetzt noch immer nicht, wie man lange Optionen richtig verarbeitet. Gibt's denn dazu niergendwo ein Beispiel?

Joghurt
12-02-2006, 20:52
Nach soviel Konfusion weiß ich jetzt noch immer nicht, wie man lange Optionen richtig verarbeitet. Gibt's denn dazu niergendwo ein Beispiel?Wie wär's damit?


#!/bin/sh
while [ ! -z "$1" ]; do
case $1 in
--hallo)
echo Hallo
;;
--welt)
echo Welt mit Parameter "$2"
shift
;;
esac
shift
doneNochmal: Wenn lange optionen benötigt werden, entweder getopt nutzen oder es von Hand machen.