Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 3-4 (Методы) / ОС_лаб_4.doc
Скачиваний:
36
Добавлен:
04.04.2013
Размер:
102.4 Кб
Скачать

Пример_1: Процедура print1 печатает (выводит в стандартный вывод) три файла, перечисленные в списке значений цикла for.

for file

in otchet pismo spravka

do

echo "printing $file"

more "$file"

done

Пример_2: Процедура print2 печатает файлы, перечисленные в командной строке (%print2 spravka otchet). В списке значений цикла for использована переменная '*' (см. раздел 6), содержащая список позиционных параметров, т.е. имена файлов spravka и otchet.

for file

in $*

do

echo "printing $file"

more"$file"

done

Пример_3:Процедураprint3печатает файлы, список которых получен командойls.

for file

in `ls`

do

echo "printing $file"

more "$file"

done

8.2.2. Оператор цикла while

Формат оператора цикла while:

whileусловие

do

команда

команда

. . . . . . .

done

Оператор whileповторяет заданную группу команд, если условие выполнения соответствуетИстине. Посколькуусловиепроверяетсяперед выполнением списка команд, возможна ситуация, когда список не будет выполненни разу.

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

Пусть эта процедура вызывается на выполнение так:

%cmplist file1 file2 file3 . . .

где – file1 – файл-образец;

file3file3 . . . – файлы для сравнения.

Текст командной процедуры cmplist:

i=$1

while cmp $i $2

do

shift

done

echo $2

Процедураcmplistработает следующим образом. Сначала переменнойiприсваивается значение первого позиционного параметра (это имя файла-образца). Условие выполнения циклаwhileформируется командойcmp– сравнить файлы. У этой команды два операнда – сравниваемые файлы. Если файлы совпали, командаcmpвырабатывает код возврата «Истина» и выполняются команды из тела цикла (do. . .done), в противном случае выполнение цикла завершается и выводится имя первого файла, содержимое которогоне совпалос содержимым файла-образца.

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

$1 $2 $3 $4

file1file2file3

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

$1 $2 $3 $4

file2file3

Таким образом, при первом выполнении командной процедуры сравнивались файлы file1 и file2 (их имена находились в переменной i и втором позиционном параметре). При втором выполнении цикла сравнивались уже файлы file1 и file3, и имена этих файлов по-прежнему находились в переменной i и втором позиционном параметре.

Пример_2:Разработаем командную процедуру (пусть она называется copy3), которая читает строки со стандартного ввода и размещает их в файлеdump. Ввод прекращается, если введена строка, состоящая из одного символа'q'.Пустые строки в файлdumpне записываются.

while

echo "Enter words [Type q, to quit]"

read line

do

if test "$line"="q"

then

break

fi

if test "$line"=""

then continue

else

echo "$line" >> dump

fi

done

Примечания. 1). Оператор break используется в циклах для досрочного выхода из цикла.

2). Оператор continue используется для пропуска команд до конца цикла. При этом осуществляется переход на начало цикла.

3). Оператор if может быть записан без применения встроенной команды test с применением квадратных скобок:

if ["$line"="q"]

Соседние файлы в папке Лаба 3-4 (Методы)