Next: break-Kommando Up: Ablaufsteuerung Previous: until-Kommando
case-Kommando
-
Beispiel:
#!/bin/sh # # Shell-Script append, das ein File # an ein anderes File "anhaengt" # # Aufruf: append [von_file] nach_file # case $# in 1) cat >>$1;; 2) cat >>$2 <$1;; *) echo "Aufruf: append [von] nach";; esac
-
allgemeine Form:
case zk inzk_muster_1) cmd_liste_1;;
zk_muster_2) cmd_liste_2;;
...
zk_muster_n) cmd_liste_n;;
esac
-
Bemerkung:
Zur Bildung der Zeichenkettenmuster zk_muster_i können die ,,pattern matching``-Möglichkeiten der Shell (*, ?, [-]) benutzt werden sowie mehrere Alternativen, getrennt durch angegeben werden:
zk_muster_1 zk_muster_2 ...) -
Beispiel:
#!/bin/sh # # komfortablere Schnittstelle fuer /usr/bin/cal # # Aufruf: cal [ <monatsname>|<monatszahl> [ <jahr> ]] # case $# in 0) set `date`; m=$2; y=$7 ;; # keine Argumente: heute 1) m=$1; set `date`; y=$7 ;; # 1 Arg: Monat im aktuellen Jahr 2) m=$1; y=$2 ;; # 2 Arg: Monat und Jahr *) echo "Aufruf: a) $0 [ <monatsname>|<monatszahl> [ <jahr> ]]" echo " b) $0 <jahr> " echo "" echo "Bsp: $0 5 1990 --> Mai 1990" echo " $0 5 --> Mai des aktuellen Jahres" echo " $0 05 --> Jahr 5 ,d.h fuer die Jahre 1-12 muss die" echo " Ziffer 0 vor die Jahreszahl gesetzt werden" exit 1;; esac case $m in ja*|Jan*) m=1 ;; fe*|Feb*) m=2 ;; ma[er]*|Ma[er]*) m=3 ;; ap*|Apr*) m=4 ;; ma[yi]|Ma[yi]) m=5 ;; jun*|Jun*) m=6 ;; jul*|Jul*) m=7 ;; au*|Aug*) m=8 ;; se*|Sep*) m=9 ;; o[ck]*|O[ck]*) m=10 ;; no*|Nov*) m=11 ;; de*|De*) m=12 ;; [1-9]|10|11|12) ;; # Monatsnummer *) y=$m;m="";; # erstes Argument als Jahreszahl esac if /usr/bin/cal $m $y then : else echo "Aufruf: a) $0 [ <monatsname>|<monatszahl> [ <jahr> ]]" echo " b) $0 <jahr> " echo "" echo "Bsp: $0 5 1990 --> Mai 1990" echo " $0 5 --> Mai des aktuellen Jahres" echo " $0 05 --> Jahr 5 ,d.h fuer die Jahre 1-12 muss die" echo " Ziffer 0 vor die Jahreszahl gesetzt werden" exit 1 fi