П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 3524 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6122 раз(а).

Учебник HTML.
Просмотров 3276 раз(а).

Руководство по PHP5.
Просмотров 5498 раз(а).

Хостинг через призму DNS.
Просмотров 4148 раз(а).

Подборка текстов стандартных документов.
Просмотров 55773 раз(а).

Учебник PHP - Самоучитель
Просмотров 3093 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 5749 раз(а).

Внешние атаки...
Просмотров 3843 раз(а).

Учебник PHP.
Просмотров 2826 раз(а).

SSI в примерах.
Просмотров 37463 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





5.3. Оператор вызова ("case")

Оператор выбора "case" имеет структуру:
    case   строка  in
	шаблон)  список команд;;
	шаблон)  список команд;;
	    ...
    esac

Здесь "case" "in" и "esac" - служебные слова. "Строка" (это может быть и один символ) сравнивается с "шаблоном". Затем выполняется "список команд" выбранной строки. Непривычным будет служебное слово "esac", но оно необходимо для завершения структуры.

Пример.

    ###
    # case-1: Структура "case".
    #         Уже рассматривавшийся в связи со
    #         структурой "if" пример проще и
    #         нагляднее можно реализовать с
    #         помощью структуры "case".
    echo -n " А какую оценку получил на экзамене?: "
    read z
    case $z in
	5) echo Молодец !            ;;
	4) echo Все равно молодец !  ;;
	3) echo Все равно !          ;;
	2) echo Все !                ;;
	*) echo  !                   ;;
    esac

Непривычно выглядят в конце строк выбора ";;", но написать здесь ";" было бы ошибкой. Для каждой альтернативы может быть выполнено несколько команд. Если эти команды будут записаны в одну строку, то символ ";" будет использоваться как разделитель команд.

Обычно последняя строка выбора имеет шаблон "*", что в структуре "case" означает "любое значение". Эта строка выбирается, если не произошло совпадение значения переменной (здесь $z) ни с одним из ранее записанных шаблонов, ограниченных скобкой ")". Значения просматриваются в порядке записи.

    ###
    # case-2:  Справочник.
    #          Для различных фирм по имени выдается
    #          название холдинга, в который она входит
    case $1 in
	     ONE|TWO|THREE) echo Холдинг: ZERO    ;;
		   MMM|WWW) echo Холдинг: Not-Net ;;
	 Hi|Hello|Howdoing) echo Холдинг: Привет! ;;
			 *) echo Нет такой фирмы  ;;
    esac
При вызове "case-2 Hello" на экран будет выведено:
    Холдинг: Привет!
А при вызове "case-2 HELLO" на экран будет выведено:
    Нет такой фирмы

Коль скоро слово "case" переводится как "выбор", то это как бы намек на то, что можно эту структуру использовать для реализации простейших меню.

    ###
    # case-3: Реализация меню с помощью команды "case"
    echo "Назовите файл, а затем (через пробел)
    наберите цифру, соответствующую требуемой
    обработке:
	    1 - отсортировать
	    2 - выдать на экран
	    3 - определить число строк  "
    read x y  # x - имя файла, y - что сделать
    case $y in
	1) sort   < $x               ;;
	2) cat    < $x               ;;
	3) wc -l  < $x               ;;
	*) echo "
		   Мы не знаем
		   такой команды ! " ;;
    esac

Разумеется, желания могут быть более сложные и на месте отдельных команд могут быть последовательности команд или вызовы более сложных расчетов.

Напишем команду "case-4", которая добавляет информацию к файлу, указанного первым параметром (если параметр один), со стандартного входа, либо (если 2 параметра) из файла, указанного в качестве первого параметра:

    ###
    # case-4: Добавление в файл.
    #         Использование стандартной переменной.
    # "$#" -  число параметров при вводе расчета
    # ">>" -  перенаправление с добавлением в файл
    case $# in
	  1) cat >> $1                           ;;
	  2) cat >> $2 < $1                      ;;
	  *) echo "Формат: case-4 [откуда] куда" ;;
    esac

"$1" (при "$#=1") - это имя файла, в который происходит добавление со стандартного входа.

"$1" и "$2" (при $#=2) - это имена файлов , из которого ("$1") и в который ("$2") добавлять.

Во всех других случаях (*) выдается сообщение о том, каким должен быть правильный формат команды.

[Назад] [Содержание] [Вперед]



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: