Anzeige:
Ergebnis 1 bis 8 von 8

Thema: BASH getopts

  1. #1
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571

    Question BASH getopts

    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
    Code:
    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
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    IIRC kann getopts das nicht. Dafür musst du das externe (aber mehr oder weniger Standard bei Linuxinstallationen) Programm getopt nehmen.
    Code:
    man getopt

  3. #3
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Dann hätte ich hier nicht gefragt! Ich seh immer nur Beispiele zur Kurzform. Vielleicht brauch ich aber auch nur ne neue Brille
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    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.

  5. #5
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    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.
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    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.

  7. #7
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Sorry "depricated" ist wahrscheinlich der falsche Ausdruck. "Veraltet" wäre wohl angebrachter! Ich bezieh mich da auf diesen Artikel, 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?
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von Hans-Georg Normann
    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?
    Code:
    #!/bin/sh
    while [ ! -z "$1" ]; do
      case $1 in
      --hallo)
         echo Hallo
         ;;
      --welt)
         echo Welt mit Parameter "$2"
         shift
         ;;
      esac
      shift
    done
    Nochmal: Wenn lange optionen benötigt werden, entweder getopt nutzen oder es von Hand machen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •