Home · Kontakt · Impressum
contents index previous up next
Next: 15.3.5 dialog Up: 15.3 Grundstrukturen Previous: 15.3.3 if ... then


15.3.4 case

Bei case wird ein Wert mit einer Reihe von Strings verglichen. Stimmen sie überein, so wird der entsprechende Abschnitt ausgeführt. Damit ist case ein Spezialfall von if. In den meisten Fällen wird case zur Ausführung von bestimmten Abschnitten eines Skripts verwendet. Insbesondere beim Starten, Neustarten und Stoppen von Diensten kommt es zum Einsatz. In den sogenannten RC-Skripten, die für das Starten und Stoppen von Dämonen und Serverdiensten verwendet werden, wird diese Konstruktion verwendet.

ole@enterprise:~> ls /sbin/rc*
/sbin/rcSuSEfirewall2  /sbin/rcgpm      /sbin/rcnetwork  /sbin/rcsyslog
/sbin/rcdhclient       /sbin/rchotplug  /sbin/rcportmap
ole@enterprise:~> ls /usr/sbin/rc*
/usr/sbin/rcalsasound     /usr/sbin/rckdm                /usr/sbin/rcsmbfs
/usr/sbin/rcapache        /usr/sbin/rcksysguardd         /usr/sbin/rcsmpppd
/usr/sbin/rcapid          /usr/sbin/rclpd                /usr/sbin/rcsnmpd
/usr/sbin/rcatd           /usr/sbin/rcmysql              /usr/sbin/rcsplash
/usr/sbin/rcautofs        /usr/sbin/rcnfs                /usr/sbin/rcsshd
/usr/sbin/rccron          /usr/sbin/rcnfsserver          /usr/sbin/rcxdm
/usr/sbin/rcfam           /usr/sbin/rcnscd               /usr/sbin/rcxfs
/usr/sbin/rcfbset         /usr/sbin/rcpcscd              /usr/sbin/rcxntpd
/usr/sbin/rci4l           /usr/sbin/rcpersonal-firewall  /usr/sbin/rcypbind
/usr/sbin/rci4l_hardware  /usr/sbin/rcpowerfail          /usr/sbin/rcyppasswdd
/usr/sbin/rcinetd         /usr/sbin/rcrandom             /usr/sbin/rcypserv
/usr/sbin/rcisdn          /usr/sbin/rcraw                /usr/sbin/rcypxfrd
/usr/sbin/rcjoystick      /usr/sbin/rcsendmail
/usr/sbin/rckbd           /usr/sbin/rcsingle

Das folgende Beispiel zeigt das Prinzip, das hinter dieser Idee steckt.

Listing 15.7   dienst

   1: #!/bin/bash
   2: 
   3: # Steuert einen Dienst. Beispiel für case ... in Struktur
   4: #   dienst start|restart|stop
   5: 
   6: # Nach dem Inhalt des Parameters $1 wird entschieden, was gemacht werden soll.
   7: case $1 in
   8:   start)
   9:     # Der Dienst wird gestartet
  10:     echo "Der Dienst wird gestartet."
  11:     ;;
  12:     
  13:   restart)
  14:     # Der Dienst wird neu gestartet
  15:     echo "Der Dienst wird neu gestartet."
  16:     ;;
  17:     
  18:   stop)
  19:     # Der Dienst wird gestoppt
  20:     echo "Der Dienst wird gestoppt."
  21:     ;;
  22:     
  23:   *)
  24:     # Falsches Kommando
  25:     echo "Falsches Kommando." > /dev/stderr
  26:     echo "Syntax:" > /dev/stderr
  27:     echo "  dienst start|restart|stop" > /dev/stderr
  28:     exit 1      # Beenden mit Fehlercode
  29:     ;;          
  30: esac

Jenachdem ob start, restart oder stop hinter dem Skriptnamen steht, wird ein anderer Abschnitt des Skripts ausgeführt. Sollte es zu keiner Übereinstimmung kommen, wird der Abschnitt mit dem Asterisk ausgeführt, der in diesem Fall einen Hilfetext enthält.

ole@enterprise:~/test> dienst start
Der Dienst wird gestartet.
ole@enterprise:~/test> dienst restart
Der Dienst wird neu gestartet.
ole@enterprise:~/test> dienst stop
Der Dienst wird gestoppt.
ole@enterprise:~/test> dienst
Falsches Kommando.
Syntax:
  dienst start|restart|stop

Hier eine praktische Anwendung um zwei VNC-Server und einen Viewer für eine Vorführung zu starten und zu beenden. Weitere Informationen über den VNC-Server und seine Konfiguration finden Sie in Abschnitt B.1.

Listing 15.8   vnc

   1: #!/bin/sh
   2: # Startet zwei VNC-Server (Master und Slave)
   3: 
   4: # Auflösung festlegen
   5: GEOM=950x680
   6: CDEPTH=16
   7: 
   8: # Variable auswerten
   9: case $1 in
  10:   start) 
  11:     # Starten der VNC-Server
  12:     # Master starten
  13:     # Passworddatei ~/.vnc/privat
  14:     vncserver :1 \
  15:       -geometry $GEOM \
  16:       -depth $CDEPTH \
  17:       -alwaysshared \
  18:       -name master \
  19:       -rfbauth $HOME/.vnc/privat
  20:         
  21:     # Slave starten
  22:     # Passworddatei ~/.vnc/public
  23:     vncserver :2 \
  24:       -geometry $GEOM \
  25:       -depth $CDEPTH \
  26:       -alwaysshared \
  27:       -name slave \
  28:       -rfbauth $HOME/.vnc/public
  29: 
  30:     # Viewer zur Kontrolle des Master-Servers starten
  31:     # Falls in einem X-Terminal als anderer Benutzer gestartet zeigt
  32:     # die Display-Variable auf das aktuelle X-Window
  33:     # Der Server muß aber vorher mit 
  34:     # xhost localhost 
  35:     # freigegeben werden
  36:     DISPLAY=:0.0
  37:     export DISPLAY
  38:     # Viewer starten
  39:     vncviewer :1 
  40:     ;;
  41:         
  42:   stop) 
  43:     # Beenden des VNC-Servers
  44:     vncserver -kill :1
  45:     vncserver -kill :2
  46:     ;;
  47:
  48:   *)    
  49:     # Falsches Kommando
  50:     echo "Syntax: vnc start|stop"
  51:     exit 1
  52:     ;;
  53: esac
  54: 
  55: # Ende


contents index previous up next
Next: 15.3.5 dialog Up: 15.3 Grundstrukturen Previous: 15.3.3 if ... then
  © 2004 by IT-Dozent Ole Vanhoefer · Zum Seitenanfang