русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Использование оператора case


Дата добавления: 2013-12-23; просмотров: 996; Нарушение авторских прав


Использование оператора if

Shell позволяет структурировать условные переходы с помощью оператора if. Простейшая форма оператора if следующая:

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

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

fi

Список команд, стоящий после if, выполняется, и если код завершения последней выполненной команды равен 0, тогда выполняется список команд, указанный после then. Слово fi обозначает конец команды if.

Чтобы выполнить альтернативный набор команд при ненулевом коде завершения, используется условие else, которое записывается cледующим образом:

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

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

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

fi

Используя условие elif вместе с командой if, можно выполнять различные условия, но при большом количестве проверок предпочтительнее использовать оператор case. Например:

if test -f "$1"

# является ли $1 файлом?

then pr $1

elif test -d "$1"

# если нет, то является ли $1 каталогом?

then (cd $1; pr *)

else echo $1 не является ни файлом, ни каталогом

fi

Приведенный пример выполняется следующим образом: если значение первого позиционного параметра является именем файла (-f), то этот файл печатается; если нет, то проверяется, является ли это имя именем каталога (-d). Если это так, то вы переходите в этот каталог (cd) и печатаете все находящиеся в нем файлы ( pr *). Во всех остальных случаях появляется сообщение об ошибке.

Команды if могут вкладываться друг в друга, но каждый if обязательно должен иметь свой fi.

Кодом завершения команды if является код завершения последней выполненной команды после условий then и else. Если команды не выполнялись, то код завершения равен 0.

Обратите внимание, что вместо указания команды test можно использовать альтернативное обозначение - прямоугольные скобки с заключенным в них проверяемым выражением. Например, предыдущий пример можно было записать так:



if [ -f "$1" ]

# является ли $1 файлом?

then pr $1

elif [ -d "$1" ]

# если нет, то является ли $1 каталогом?

then (cd $1; pr *)

else echo $1 не является ни файлом, ни каталогом

fi

Обратите внимание на то, что при такой форме записи пробелы после левой скобки и перед правой обязательны.

 

Оператор case также дает возможность проверять различные условия. Основной формат оператора case следующий:

case подстрока in

шаблон ) cписок команд ;;

....

шаблон ) cписок команд ;;

esac

Shell пытается найти указанную подстроку по очереди в каждом шаблоне, используя те же самые соглашения, что и при генерации имен файлов. Если соответствие установлено, то выполняется список команд после этого шаблона. Два символа точки с запятой (;;) служат обозначением конца оператора case и необходимы после каждого шаблона кроме последнего. Обратите внимание на то, что только одно значение шаблона (из указанных) может обнаружиться в подстроке, что сравнение с шаблонами выполняется последовательно, и поэтому если первым шаблоном выступает звездочка (*), все остальные игнорируются.

С одним и тем же списком команд может быть связано несколько альтернативных шаблонов, разделенных символом (|).

case $i in

*.c) cc $i

;;

*.h | *.sh)

: do nothing

;;

*) echo "$i of unknown type"

;;

esac

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

Код завершения оператора case равен коду завершения последней выполненной команды. Если никакие команды не выполнялись, то код завершения равен 0.

 

Условные циклы: while и until

Основная форма команды while имеет вид:

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

do

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

done

Сначала выполняются команды из первого списка, и если код завершения последней команды в этом списке равен 0, тогда выполняются команды из второго списка. Эта последовательность повторяется до тех пор, пока код завершения первого списка равен 0. Чтобы цикл выполнялся до тех пор, пока код завершения первого списка не равен 0, надо заменить while на until.

Любая строка может быть заменена символом "точка с запятой". Код завершения команд while и until равен коду завершения последней выполненной команды во втором списке. Если команды из второго списка не выполнялись, код завершения равен 0.

 

Организация цикла для списка: for

Часто бывает нужно выполнить некоторый набор операций для каждого файла из какого-либо списка или выполнить одну команду для каждого из нескольких аргументов. Для этого существует команда for. Формат команды for следующий:

for переменная in список значений

do

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

done

Значения переменных в списке разделяются пробелами. Команды в списке команд выполняются один раз для каждого значения переменной из списка значений. Переменной по очереди присваивается каждое значение из списка. Например, следующий цикл for производит сравнение исходных текстов xec.c, cmd.c и word.c в текущем каталоге с файлами с такими же именами, но в каталоге

/usr/src/cmd/sh:

 

for CFILE in xec cmd word

do

diff $CFILE.c /usr/src/cmd/sh/$CFILE.c

done

Обратите внимание на то, что первое упоминание имени CFILE сразу после слова for не сопровождается появлением символа "$", поскольку в данном случае используется имя переменной, но не ее значение.

Слово "in", являющееся частью команды for, можно не указывать. В этом случае текущий набор позиционных параметров будет использован вместо списка значений. Это полезно в том случае, если набор команд выполняется для каждого аргумента из списка аргументов, общее число которых неизвестно.

В качестве примера создайте файл с именем echo2, который содержит следующий текст:

for word

do

echo $word$word

done

Измените статус файла echo2:

chmod +x echo2

Теперь введите следующую команду:

echo2 ma pa bo fi yo no so ta

Результатом выполнения этой команды будет:

---------------------------------------------------------

¦ mama

¦ papa

¦ bobo

¦ fifi

¦ yoyo

¦ nono

¦ soso

¦ tata

 

Управление циклами: break и continue

Для прекращения выполнения циклов while или for применяется команда break. Команда continue немедленно запускает выполнение следующего шага в цикле. Эти команды действуют только если они встречаются между командами do и done.

Команда break завершает выполнение только выполняемого в данный момент цикла, вызывая продолжение работы команд, стоящих после ближайшего done. Выход из n-уровневого вложенного цикла достигается командой break n.

Команда continue продолжает выполнение с ближайшего открытого оператора for, while или until, т.е. того, который содержит этот оператор continue. Вы также можете задать аргумент n в команде continue, и тогда выполнение будет продолжено с n-ного вложенного цикла:

# Эта процедура интерактивная.

# Команды "break" и "continue" используются

# пользователем для управления вводом данных.

while true #loop forever

do echo "Please enter data"

read response

case "$response" in

"done") break

# no more data

;;

"") # just a carriage return,

# keep on going

continue

;;

*) # process the data here

;;

esac

done

 



<== предыдущая лекция | следующая лекция ==>
Управление потоком выполнения | Конец файла и выход


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.