• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Kommando Parameter mit getopts auswerten

mr_kaktus

Member
Hi @all,

ich schreib gerade ein Skript, der mit 2 Paramerter aufgerufen werden darf aber mindest einen haben muss.
Das Eigentliche skript ist fertig, nun möchte ich jetzt eine Auswertung der Parameter vornehmen. Das wollte ich mit getopts lösen, aber ich bekomme das nicht gebacken, villeicht kann mir jemand Helfen ?

Das ist das Auswertunsskript:
Code:
# Es muss mindestesns ein Argument übergeben werden
# --------------------------------------------------
if (( $# <= 0 )) ; then
  usage $EXIT_ERROR
fi


#set -x

# Eläuterung der Schalter:
# -h ==> Hilfe
# -u ==> Username
# -g ==> Primary group
while getopts ':u:g:h' OPTION
do
        case $OPTION in
        u)      USERNAME=$2
                ;;

        g)      GROUP="${4:-users}"
                ;;

        h)      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 gar nicht passiert sein..." >&2
                usage $EXIT_BUG
                ;;
        esac
done

echo "\$OPTION   ==> $OPTION"
echo "\$USERNAME ==> $USERNAME"
echo "\$GROUP    ==> $GROUP"

# Verbrauchte Argumente überspringen
shift $(( OPTIND - 1 ))
Mein Problem liegt nun darin, ich möchte alle möglichen Eingabe bzw. Parameterfehler abfangen. Beim ausführen des Skripts mit absichtlich falschen eingaben passiert da gar nichts:
Code:
./mkhome.sh a
$OPTION   ==> ?
$USERNAME ==>
$GROUP    ==>
Die variable $OPTION wird mit einem Wert gefühlt ==> "?", Jetzt sollte die Case-Anweitung springen, tut sie aber nicht. Was mache ich falsch?

by mr_kaktus
 

TeXpert

Guru
der Parameter [a] ist aber kein gültiger Parameter der von getopts geparsed wird. getopts geagiert nur auf -f -g -...

Du müsstest also am Ende (wenn keine Parameter übrigsein dürfen) noch mal auf die Parameter-Anzahl testen:

Code:
!/bin/sh

user=
group=

while getopts 'hu:g:' opt
do
    case "$opt" in
      h)  echo "hilfe"
          ;;
      u)  user="$OPTARG"
          ;;
      g)  group="$OPTARG"
          ;;
      \?) # unknown flag
      	  echo >&2 \
	  "unknown flag"
	  exit 1;;	  
    esac
done

#skip
shift `expr $OPTIND - 1`

if [ $# -gt 0 ]
then
  echo "da gibts noch ein paar Parameter: $*"
fi
 
OP
M

mr_kaktus

Member
Das mit der Abfrage, war eine Gute IDEE Jetzt funktioniert es wie es soll :D

Code:
if [ $# -gt 0 ] 
then 
  echo "da gibts noch ein paar Parameter: $*" 
fi

Danke für die Hilfe.

by mr_kaktus
 
Oben