Springe zum Hauptinhalt

Bourne
next up previous contents
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 in

        zk_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 $\vert$ angegeben werden:


        zk_muster_1 $\vert$ zk_muster_2 $\vert$ ...)

  • 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