Искусство программирования на языке сценариев командной оболочки
Шрифт:
#!/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
# +=================================================================+
#
((a = 1)) # a=1
# Двойные скобки допускают наличие лишних пробелов в выражениях.
while (( a <= LIMIT )) # В двойных скобках символ "$" перед переменными опускается.
do
echo -n "$a "
((a += 1)) # let "a+=1"
# Двойные скобки позволяют наращивание переменной в стиле языка C.
done
echo
# Теперь, программисты, пишущие на C, могут чувствовать себя в Bash как дома.
exit 0
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
Для управления ходом выполнения цикла служат команды break и continue [ 23 ] и точно соответствуют своим аналогам в других языках программирования. Команда break прерывает исполнение цикла, в то время как continue передает управление в начало цикло, минуя все последующие команды в теле цикла.
Пример 10-20. Команды break и continue в цикле
23
Эти команды являются встроенными командами языка сценариев командной оболочки (shell), в то время как while, case и т.п.
– - являются зарезервированными словами.