staging.inyokaproject.org

Parameter in einem shell skript

Status: Ungelöst | Ubuntu-Version: Ubuntu GNOME 14.04 (Trusty Tahr)
Antworten |

UnitedBlaze

Anmeldungsdatum:
30. Mai 2018

Beiträge: Zähle...

Moin Moin, ich habe folgendes Problem: ich übergebe meine Skript beim Start einige Parameter. ./meinskript.sh x y z q r w In einer ersten case Anweisung benutze ich durch $1 x als eine Option. Anschließend sind y oder y & z meine Argumente (angesprochen durch $2 und $3) für eine Aktion. Diese case Anweisung ist in eine Schleife die solange läuft bis alle Parameter benutzt wurden. nun gehe ich erneut in die case Anweisung und möchte aber dieses mal Anstatt mit $1 auf x zuzugreifen, den nächsten unbenutzten Parameter benutzen. Heißt je nachdem ob nur y oder y&z benutzt wurden nun z oder q aufrufen. Da in meiner case Anweisung jedoch $1 steht, greift dieses wieder auf x zurück.

Wie kann ich es so ändern, dass es den gewünschten Erfolg hat?

mrkramps Team-Icon

Avatar von mrkramps

Anmeldungsdatum:
10. Oktober 2006

Beiträge: 5523

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7795

shift frisst $1 und alle anderen rücken eins auf. Vielleicht suchst du das.

$ set -- a b c d e
$ echo $1 $2 $3
a b c
$ shift
$ echo $1 $2 $3
b c d
$ shift
$ echo $1 $2 $3
c d e

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

UnitedBlaze schrieb:

Diese case Anweisung ist in eine Schleife die solange läuft bis alle Parameter benutzt wurden.

Warum packst Du das in eine Schleife, wenn die Struktur der Kommandozeile doch fest ist? Für mich sieht es so aus, dass x ein Kommando auswählt und Du je nachdem, was x ist, verschiedene weitere Aktionen startest. Wäre das dann nicht eher so eine Struktur?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
case "$1" in
x1) # Value 1 for x
  do_x_1 "$2" "$3"
;;
x2) # Value 2 for x
  do_x_2 "$2"
;;
*)
  echo "ERROR: unknown option: $1" >&2
  exit 1
;;
esac

Dabei können do_x_1 Shell-Funktionen sein, die Du weiter oben definiert hast oder andere Skripte oder Du fügst gleich die Logik dort ein, wenn sie nicht zu umfangreich ist.

Wie kann ich es so ändern, dass es den gewünschten Erfolg hat?

Im Zweifel poste noch mal Dein Skript. Mit konkreteren Werten statt "x" und "y" wird vielleicht leichter klar, was Du willst.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

Und falls wirklich Optionen gemeint sind, kann man sich auch getopts oder getopt anschauen, bevor man das Rad selbst neu erfindet. ☺

Antworten |