Variable Übergabeparameter mit getopts

Bash, Shell, PHP, Python, Perl, CGI
dante
Posts: 128
Joined: 2010-04-20 12:50

Variable Übergabeparameter mit getopts

Post by dante » 2011-07-01 15:51

Hallo zusammen,

folgendes bekomme ich gerad nicht gebacken:

Skriptaufruf soll wie folgt sein:

Code: Select all

meinSkript -e test.zip -v test2.zip /home/meinuser


Die Parameter sind optional, d.h. "-v" könnte auch wegfallen.

Das Skript sieht grob so aus:

Code: Select all

#/bin/bash

function xmlimport() {

        local OPTIND OPTARG opt

        while getopts "be:v:h" opt; do
          case ${opt} in
            b)  doDumps=true;;
            e)  file_1=$OPTARG;;
            h)  echo -e $dishelp;;
            v)  file_2=$OPTARG;;
            ?)  return 1;;
          esac
        done
}
xmlimport ${@}


Argumente, die ich an das Skript übergebe, kann ich ja per "$1 $2 usw." aufrufen.
Obiges "/home/meinuser" wäre so ein Argument, da aber nun die Optionen davor variabel sind, kann ich ja nicht per "$3" o.Ä auf das Argument zurückgreifen, da eben die Reihenfolge variiert.

Gibt es eine Möglichkeit, immer das letzte Argument auszulesen?

Ich muss dazu sagen, dass ich absolut neu im Bash Skripting bin, obiges ist quick&dirty runtergeschrieben.

Gruß
dante

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: Variable Übergabeparameter mit getopts

Post by daemotron » 2011-07-01 17:23

$# enthält die Anzahl der übergebenen Argumente; das Binary selbst wird i.d.R. als erstes Argument gezählt ($0).

In einem meiner Shell-Skripte kannst Du mal gucken, wie man die Argumente in einer Schleife auch ohne getopt auswerten kann (ab Zeile 204):

http://www.rootutils.org/projects/cdepl ... cdeploy.sh

Bei Deinem Beispiel (fixes positionales Argument am Ende) müsste es dann heißen

Code: Select all

while [ "$#" -gt "1" ]
do
...
done
# Hier dann das letzte Argument verarbeiten, es steht jetzt in $1


HTH
Last edited by daemotron on 2011-07-01 17:25, edited 1 time in total.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

dante
Posts: 128
Joined: 2010-04-20 12:50

Re: Variable Übergabeparameter mit getopts

Post by dante » 2011-07-02 14:14

Danke, hat geholfen :-BD

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: Variable Übergabeparameter mit getopts

Post by Roger Wilco » 2011-07-02 17:19

Kleine Ergänzung noch:

Code: Select all

shift $(($#-1))

Das hat den gleichen Effekt wie die von daemotron beschriebene `while`-Schleife. `shift` verschiebt die Eingabeparameter um die als Parameter übergebene Anzahl Stellen (oder um eine Stelle, wenn kein Parameter übergeben wurde).