Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы OC UNIX_часть3.doc
Скачиваний:
23
Добавлен:
18.04.2015
Размер:
543.23 Кб
Скачать

4.7. Оператор вызова case

Управляющая конструкция case(раскладывать) предназначена для организации ветвления по нескольким направлениям в зависимости от значений аргументов, т.е. можно эту конструкцию использовать для реализации простейших меню. Общий вид команды следующий:

case переменная in

образец) список–команд ;;

образец) список–команд ;;

...

esac

Здесь case,inиesac– служебные слова. Каждая альтернатива заканчивается литерами;;. Оболочка пытается сопоставитьпеременнуюс каждым изобразцовв порядке их записи. Если найден подходящийобразец, выполняется соответствующийсписок–команд, после чего выполнение конструкцииcaseзавершается. На месте списка команд могут быть вызовы более сложных расчетов.

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

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

Например, Введите имя файла, а затем (через пробел) наберите цифру, соответствующую требуемой обработке:

1 – отсортировать содержимое указанного файла;

2 – выдать на экран содержимое файла;

3 – определить число строк в файле.

read x y # x – имя файла, y – что сделать

case $y in

1) sort < $x ;;

2) cat < $x ;;

3) wc –l < $x ;;

*) echo "Нет такой команды!" ;;

esac

4.8. Функции в shell

Функция позволяет подготовить список команд shell для последующего выполнения.

Описание функции имеет вид:

имя()

{

список команд

}

Обращение к функции происходит по имени. При выполнении функции не создается нового процесса. Она выполняется в среде соответствующего процесса. Аргументы функции становятся ее позиционными параметрами.

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

Например, функциюgoможно использовать для перехода к другому каталогу:

function go

{

cd $1

/usr/bin/ls –al

}

4.9. Контрольные вопросы

  1. Назовите объекты, которые можно протестировать с помощью команды test?

  2. Что делает команда expr?

  3. Что делает команда read?

  4. Назовите ключевые слова, используемые в операторе цикла while.

  5. Назовите ключевые слова, используемые в операторе цикла for.

  6. Назовите ключевые слова, используемые в операторе if.

  7. Назовите ключевые слова, используемые в операторе вызова case.

5. Создание сценария командного процессора

В соответствии со своим названием сценарий командного процессора представляет собой текстовый файл, который указывает командному процессору на выполнение заданной последовательности действий. Сценарий может содержать любую последовательность команд (как внутренних команд командного процессора, так и внешних команд UNIX, с аргументами или без них), вызовов программ или других написанных ранее сценариев. Сценарии могут использовать перенаправления ввода/вывода и конвейер, что позволяет вам писать свои собственные фильтры. Другими словами, сценарий – это сложная командная строка, сохраненная в файле.

Командный процессор Bourne/bin/shявляется родоначальником всех командных процессоров UNIX и доступен в во всех системах UNIX–системах. Сценарий, написанный для командного процессораBourne, будет работать под управлением командного процессора Cи/bin/csh. Сценарии командного процессораBourneвыполняются также под управлением командного процессораКорна/bin/ksh. Существуют также утилиты, которые могут транслировать сценарии из формата одного командного процессора в формат другого.

С примерами сценариев командных процессоров вы уже встречались. Для задания различных параметров и выполнения других задач по настройке используются файлы сценариев .profileи.login.

Сценарии командных процессоров могут запрашивать ввод и выполнять те или иные действия в зависимости от того, что вы набираете на клавиатуре. Аналогично, в командах можно использовать задаваемые пользователем аргументы и выбирать соответствующие шаги сценария в зависимости от результатов таких команд. Этот принцип селективного или условного выполнения, общий для всех языков программирования, называется управлением выполнения программы. Некоторые из ваших простых сценариев командных процессоров будут просто выполнять фиксированную последовательность операций, которые работают аналогично макрокоманде редактора, в то время как другие будут предлагать вам различные варианты выбора. С учетом того, что сценарий командного процессора может вызывать другие программы и сценарии, ваши возможности практически неограниченные.

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