Чтение онлайн

ЖАНРЫ

Искусство программирования на языке сценариев командной оболочки

Купер Мендель

Шрифт:

echo

previous=$var1 # запомнить предыдущее значение

[ "$var1" != end ]

# В операторе "while" присутствуют 4 условия, но только последнее управляет циклом.

# *последнее* условие - единственное, которое вычисляется.

do

echo "Введите значение переменной #1 (end - выход) "

read var1

echo "текущее значение = $var1"

done

#

попробуйте самостоятельно разобраться в сценарии works.

exit 0

Как и в случае с for, цикл while может быть записан в C-подобной нотации, с использованием двойных круглых скобок (см. так же Пример 9-28).

Пример 10-17. C-подобный синтаксис оформления цикла while

#!/bin/bash

# wh-loopc.sh: Цикл перебора от 1 до 10.

LIMIT=10

a=1

while [ "$a" -le $LIMIT ]

do

echo -n "$a "

let "a+=1"

done # Пока ничего особенного.

echo; echo

# +=================================================================+

# А теперь оформим в стиле языка C.

((a = 1)) # a=1

# Двойные скобки допускают наличие лишних пробелов в выражениях.

while (( a <= LIMIT )) # В двойных скобках символ "$" перед переменными опускается.

do

echo -n "$a "

((a += 1)) # let "a+=1"

# Двойные скобки позволяют наращивание переменной в стиле языка C.

done

echo

# Теперь, программисты, пишущие на C, могут чувствовать себя в Bash как дома.

exit 0

Стандартное устройство ввода stdin, для цикла while, можно перенаправить на файл с помощью команды перенаправления < в конце цикла.

until

Оператор цикла until проверяет условие в начале каждой итерации, но в отличие от while итерация возможна только в том случае, если условие ложно.

until [condition-is-true] do command... done

Обратите внимание: оператор until проверяет условие завершения цикла ПЕРЕД очередной итерацией, а не после, как это принято в некоторых языках

программирования.

Как и в случае с циклами for/in, при размещении ключевого слова do в одной строке с объявлением цикла, необходимо вставлять символ ";" перед do.

until [condition-is-true] ; do

Пример 10-18. Цикл until

#!/bin/bash

until [ "$var1" = end ] # Проверка условия производится в начале итерации.

do

echo "Введите значение переменной #1 "

echo "(end - выход)"

read var1

echo "значение переменной #1 = $var1"

done

exit 0

10.2. Вложенные циклы

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

Пример 10-19. Вложенный цикл

#!/bin/bash

# Вложенные циклы "for".

outer=1 # Счетчик внешнего цикла.

# Начало внешнего цикла.

for a in 1 2 3 4 5

do

echo "Итерация #$outer внешнего цикла."

echo "---------------------"

inner=1 # Сброс счетчика вложенного цикла.

# Начало вложенного цикла.

for b in 1 2 3 4 5

do

echo "Итерация #$inner вложенного цикла."

let "inner+=1" # Увеличить счетчик итераций вложенного цикла.

done

# Конец вложенного цикла.

let "outer+=1" # Увеличить счетчик итераций внешнего цикла.

echo # Пустая строка для отделения итераций внешнего цикла.

done

# Конец внешнего цикла.

exit 0

Демонстрацию вложенных циклов "while" вы найдете в Пример 25-6, а вложение цикла "while" в "until" -- в Пример 25-8.

10.3. Управление ходом выполнения цикла

break, continue

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