Hi, On Wed, 26 Feb 2003, Werner Schalk wrote:
(z.B. ./bla -v -t -a) mit einer variablen Anzahl und Reihenfolge parsen? Ich habe mir ein Skript gebastelt, welches auch gut funktioniert, aber ich weiß nicht, wie ich die Anzahl der Parameter flexibel gestalte, so daß auch deren Reihenfolge unterschiedlich sein kann (z.B. ./bla -t -v -a, ./bla -v -a -t -d oder ./bla -version). Momentan benutze ich u.a. folgenden Code:
for Parameter in $@; do
case $Parameter in
Dieser Code laesst doch unterschiedliche Reihenfolge schon zu. Ob ich './bla -a -b' oder './bla -b -a' mache, beide Codeteile in dem "case" werden dann ausgefuehrt (natuerlich in umgedrehter Reihenfolge). Wenn du das nicht willst, musst du nicht sofort Dinge tun, sobald du den Parameter erkannt hast, sondern nur merken, dass er da war. Nemen wir mal an, '-a' und '-b' tun Dinge, die man auch gleichzeitig machen kann, aber wenn man beides will, muss man A vor B machen. Dann so: seen_a= seen_b= for arg in $@; do case $arg in -a) seen_a=yes ;; -b) seen_b=yes ;; esac done test -n "$seen_a" && { tue was fuer -a } test -n "$seen_b" && { tue was fuer -b } Dies laesst "-a -b" und "-b -a" (und natuerlich -a und -b alleine) zu, und tut beides mal dasselbe in der gleichen Reihenfolge. So, und wenn du das alles nicht zu Fuss programmieren moechtest, dann hoere auf die anderen im Thread, und benutze getopt (bash(1) oder 'help getopt' im Prompt). Ciao, Micha.