Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Построение циклов






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

Цикл типа while (пока true):

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

do список_команд2

done

Список_команд1 возвращает код возврата последней выполненной команды. Если условие истинно, выполняется список_- команд2, затем снова список_команд1 с целью проверки условия, а если ложно, выполнение цикла завершается. Таким образом, циклический список_команд2 выполняется до тех пор, пока условие истинно.

Пример 1.

Проверка наличия параметров при обращении к данной процедуре. Вывод на экран сообщений о наличии параметров и тексты параметров.

Текст процедуры, которой присвоено имя Р1:

if $1 –eq 0

then echo “No param”

else echo “Param: ’; while test ‘$1’

do

echo “$1”

shift

done

fi

Результат работы процедуры:

$P1

No param

$P1 abc df egh

Param:

abc

df

egh

$

 

Пример 2.

Ввод строки из нескольких слов. Подсчет и вывод числа символов в каждом слове.

Текст процедуры, которой присвоено имя P2:

echo “Input string: ”

read A

set $A

while [ “$1” ]

do

echo “$1 = `expr ”$1”: ‘.*’`”

shift

done

Результат работы процедуры:

$P2

Input string:

df ghghhhh aqw

df = 2

ghghhhh = 7

aqw = 3

$

Пример 3. Вывести на экран слово строки (поле), номер которого (переменная N) указан в параметре при обращении к процедуре, которой присвоено имя P3. Процедура запрашивает ввод строки с клавиатуры. Номер слова вводится как аргумент процедуры.

Текст процедуры P3:

i=1 - счетчик номеров слов в строке, формируется при каждом

выполнении цикла

N=$1 -значение первого параметра

echo " Введи строку: "

read a

set $a

while test $i -lt $N

do

i=`expr $i + 1` - формирование номера следующего слова

shift

done

echo " $N поле строки: \" $1\" "

 

Пример работы процедуры P3:

$P3 2 < NewLine> - N=2

Введи строку: aa bb cc dd < NewLine>

2 поле строки: " bb"

$

Цикл типа until (пока false):

until список_команд1

do список_команд2

done

Логическое условие, определяемое по коду возврата списка_команд1, инвертируется, т.е. цикл выполняется до тех пор, пока условие ложно.

Пример процендуры с именем P4, выполняющей заданное число циклов.

$cat> P4

X = 1 - cчетчик числа циклов

until test $X -gt 10 - задано число циклов = 10

do

echo X is $X

X = `expr $X + 1`

done

< Ctrl*D>

$sh P4

X is 1

X is 2

.................

X is 10

$

 

Цикл типа for:

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

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

done

Переменная с указанным в команде именем заводится автоматически. Переменной присваивается значение очередного слова из списка_значений и для этого значения выполняется список_команд. Количество итераций равно количеству значений в списке, разделенных пробелами (т.е. циклы выполняются пока список не будет исчерпан).

Пример текста процедуры, печатающей в столбец список имен файлов текущего каталога.

list =`ls`

for val in $list

do

echo " $val"

done

echo end

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

 

m=0 - переменная для счетчика скопированных файлов

if [ -d $HOME/$1 ]

then echo " Каталог $1 существует"

else

mkdir $HOME/$1.

echo " Каталог $1 создан"

fi

for file in *

do

if [ -f " $file" ]

then cp " $file" $HOME/$1; m=`expr $m + 1`

fi

done

echo " Число скопированных файлов: $m"

Выполнение процедуры:

$sh comfil dir1

Число скопированных файлов: ….

Здесь символ * - имеет смысл < список_имен_файлов_текущего_ каталога>

Пример процедуры PROC, выводящей на экран имена файлов из текущего каталога, число символов в имени которых не превышает заданного параметром числа.

if [ “$1” = “” ]

then

exit

fi

for nam in *

do

size = `expr $nam: ‘.*’`

if [ “$size” –le “$1” ]

then echo “Длина имени $nam $size символа”

fi

done

Вывод содержимого текущего каталога для проверки работы процедуры:

$ ls –l

total 4

drwxrwxrwx 2 lev lev 1024 Feb 7 18: 18 dir1

-rw-rw-r-- 1 lev lev 755 Feb 7 18: 24 out

-rwxr-xr-x 1 lev lev 115 Feb 7 17: 55 f1

-rwxr-xr-x 1 lev lev 96 Feb 7 18: 00 f2

$

Результаты работы процедуры:

$ PROC 2

Длина имени f1 2 символа

Длина имени f2 2 символа

$PROC 3

Длина имени out 3 символа

Длина имени f1 2 символа

Длина имени f2 2 символа

$

 

Пример. Процедура с итменем PR выводит на экран из указанного параметром подкаталога имена файлов с указанием их типа.

cd $1

for fil in *

do

If [ -d $fil]

then echo “$fil – catalog”

else echo “$fil – file”

fi

done

Вывод содержимого подкаталога для проверки работы процедуры:

$ ls –l pdir

total 4

drwxrwxrwx 2 lev lev 1024 Feb 7 18: 18 dir1

-rw-rw-r-- 1 lev lev 755 Feb 7 18: 24 out

-rwxr-xr-x 1 lev lev 115 Feb 7 17: 55 f1

-rwxr-xr-x 1 lev lev 96 Feb 7 18: 00 f2

 

Результаты работы процедуры:

$ PR pdir

dir1 – catalog

out – file

f1 – file

f2 – file

$

Некоторые дополнительные команды, которые могут быть использованы в процедурах:

sleep t - приостанавливает выполнение процесса на t секунд

Пример. Бесконечная (циклическая) процедура выводит каждые пять секунд сообщение в указанный файл fil.

while true

do

echo “текст_сообщения”> fil

sleep 5

done

Примечание: вместо файла (или экрана) может быть использовано фиктивное устройство /dev/null (например для отладки процедуры).

Примечание: в процедуре реализуется бесконечный цикл. Для ограничения числа циклов надо предусмотреть счетчик циклов (см. выше) или пркратить выполнение процесса процедуры с помощью команды управления процессами - $kill (см. ниже).

exit [n] - прекращение выполнения процедуры с кодом завершения [n] или с кодом завершения последней выполненной команды.

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


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.011 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал