PředchozíNahoruDalšíObsah

4.5 Case ... in ... esac

Struktura case je velmi podobná struktuře if. V základu struktura case je určena pro vykonání jednoho z několika kusů kódu a to podle toho, jakou hodnotu má proměnná uvedená za příkazem case. Zde je příklad struktury case:

#!/bin/bash
x=5;     # inicializuje x na hodnotu 5
# nyní se bude testovat hodnota x:
case $x in
  0) echo "Hodnota x je 0."
  ;;
  5) echo "Hodnota x je 5."
  ;;
  9) echo "Hodnota x je 9."
  ;;
  *) echo "Hodnta x není ani 0, ani 5, ani 9."
esac

Je tedy vidět, že se vykoná příkaz, který je zapsán u hodnoty 5, kterou proměnná x má. Nastane-li situace, že proměnná x nebude ani 0, 5 nebo 9, provede se příkaz určen znakem *. Příkaz case tedy vyhodnotí hodnotu řídící proměnné x, podle hodnoty se poté najde příslušná hodnota před závorkou a ta se provede. Nebude-li odpovídat žádné hodnotě ve struktuře, zkusí se nalést *) a provede se blok příkazů za ním. Nenalezne-li se hvězdička, žádný příkaz ve struktuře se neprovede. Celá konstrukce by se též dala realizovat strukturou if:

#!/bin/bash
x=5
if [ "$x" -eq 0 ]; then
  echo "Hodnota x je 0."
elif [ "$x" -eq 5 ]; then
  echo "Hodota x je 5."
elif [ "$x" -eq 9 ]; then
  echo Hodnota x je 9.
else
  echo "Hodnota x je neurčena."
fi

Práce struktury case je tedy podle známé struktury if patrná. Nakonec ještě jeden příklad speciální konstrukce pomocí case.

#!/bin/bash

echo "Je nyní ráno? Odpovězte \"ano\" nebo \"ne\""
read timeofday

case "$timeofday" in
  ano | a | Ano | ANO )
    echo "Dobré ráno"
    ;;
  [nN]* )
    echo "Dobré odpoledne"
    ;;
  * )
    echo "Promiňte, ale nerozuměl jsem"
    echo "Odpovězte \"ano\" nebo \"ne\""
    exit 1
    ;;
esac

exit 0

Pro ještě lepší a efektivnější kontrolu odpovědi ano můžeme využít kontrukce pomocí žolíkových znaků

[aA] | [aA][nN][oO] )

PředchozíNahoruDalšíObsah

10. dubna 2001 18:47