Page 1 of 1

Variable Übergabeparameter mit getopts

Posted: 2011-07-01 15:51
by dante
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

Re: Variable Übergabeparameter mit getopts

Posted: 2011-07-01 17:23
by daemotron
$# 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

Re: Variable Übergabeparameter mit getopts

Posted: 2011-07-02 14:14
by dante
Danke, hat geholfen :-BD

Re: Variable Übergabeparameter mit getopts

Posted: 2011-07-02 17:19
by Roger Wilco
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).