enter a number from 1 to 5 : 4 you select 4
С помощью шаблона * выполним прием информации, с которой не установлено соответствия:
$ caseselect
enter a number from 1 to 5 :pen
caseselect: This ls not between 1 and 5
При использовании оператора case в качестве команды or можно указывать символ. Например, vt100|vt102) соответствует шаблону vt100 или vt102.
В следующем примере у пользователя запрашивают тип терминала. Если пользователь вводит vt100 или vt102, выполняется сравнение с шаблоном "vtl00| vtl02)". В данном случае переменной term присваивается значение vt100. Если пользователь
указывает тип терминала, который не соответствует шаблону, с помощью шаблона * выполняется прием этой информации и значение типа терминала все равно устанавливается как vt100. Наконец, за пределами действия оператора case производится экспорт переменной term. Независимо от тех сведений, которые вводит пользователь, переменная term представляет действительный тип терминала, поскольку используется поиск по шаблону*.
$ pg caseterm
#!/bin/sh
# caseterm
echo " choices are.. vt100, vtl02, vt220"
echo -n "enter your terminal type :"
read TERMINAL
case $TERMINAL in
vtl00|vt102) TERM=vt100
;;
vt220) TERM=vt220
;;
*) echo "`basename $0`: Unknown response" >&2
;;
echo "setting it to vt100 anyway, so there"
TERM=vt100
esac
export TERM
echo "Your terminal ls set to $TERM"
Если при выполнении сценария указывается некорректный тип терминала, получим следующее:
$ caseterm
choices are.. vt100, vtl02, vt220 enter your terminal type :vt900
caseterm: Unknown response setting it to vt100 anyway, so there
Your terminal ls set to vt100
Если вводится существующий тип терминала, получим:
$ case2
choices are.. vt100, vtl02, vt220 enter your terminal type :vt220
Your terminal ls set to vt220
В любом случае пользователь устанавливает тип терминала.
Оператор case удобно применять при отображении запроса на продолжение обработки. Ниже приводится сценарий, в котором пользователю предлагается указать в качестве ответа либо 'у', что означает продолжение обработки, либо 'n' — выход из сценария. Если пользователь введет у, Y, yes или Yes, обработка будет продолжена в соответствии с частью сценария после оператора case. Если пользователь введет n, N, no или какой‑либо другой ответ, работа со сценарием для него завершается.
$ pg caseans
#!/bin/sh
# caseans
echo -n "Do you wish to proceed [y..n] :"
read ANS
case $ANS in
y|Y|yes|Yes) echo "yes is selected"
;;
n|N) echo "no is selected"
exit 0 # нет ошибки, поэтому для выхода укажите 0
;;
*) echo "`basename S0`" : Unknown response" >&2
exit 1
;;
esac
# если мы оказались здесь, были выбраны значения y|Y|yes|Yes.
Если при выполнении указанного сценария выбрать некорректный вариант ответа, отображаются следующие данные:
$ caseans
Dо you wish to proceed [y..n] :df
caseans : Unknown response
В случае корректного ответа:.
$ caseans
Dо you wish to proceed [y..n] :y
yes is selected
Можно также использовать оператор case при передаче параметров в сценарии.
В следующем сценарии при осуществлении проверки используется специальный параметр $#, который представляет число передаваемых аргументов. Если это число отлично от 1, сценарий завершает работу, отображая соответствующее сообщение.
Затем оператор case выполняет прием следующих параметров: passwd, start, stop или help. В дальнейшем код реализуется для каждого совпадения с этими шаблонами. При передаче неизвестного значения на экран выводится стандартное сообщение об ошибке.
$ pg caseparam
#!/bin/sh
# caseparam
if [ $# != 1 ]; then