Введение
В этой лабораторной работе вы научитесь использовать циклы в Bash-скриптах. Циклы — это мощные инструменты, которые позволяют многократно повторять набор инструкций, делая ваши скрипты более эффективными и гибкими. Мы разберем три типа циклов: for, while и until. Кроме того, вы познакомитесь с операторами break и continue, которые позволяют тонко управлять процессом выполнения цикла. Эта работа ориентирована на новичков и проведет вас через каждую концепцию шаг за шагом.
Настройка окружения
Начнем с подготовки рабочего пространства. Мы создадим новый каталог, в котором будем хранить все наши эксперименты с циклами.
Откройте терминал в WebIDE. По умолчанию вы должны находиться в каталоге /home/labex/project. Если вы не уверены в этом, вы всегда можете перейти туда с помощью следующей команды:
cd /home/labex/project
Теперь создадим новую папку для наших скриптов:
mkdir bash_loops
cd bash_loops
Эта команда создает каталог с именем bash_loops и переходит в него. Мы будем использовать это место для всех последующих упражнений.
Зачем мы это делаем? Организация скриптов по отдельным папкам — это признак хорошего тона в программировании. Это помогает поддерживать порядок и упрощает поиск нужных файлов в будущем.
Цикл for
Цикл for используется для перебора списка значений. Это можно описать фразой: «Для каждого элемента в этом списке выполни определенное действие». Давайте создадим скрипт, демонстрирующий работу цикла for.
Создайте новый файл с именем for_loop.sh в каталоге bash_loops:
touch for_loop.sh
Теперь откройте файл for_loop.sh в WebIDE и добавьте в него следующее содержимое:
#!/bin/bash
## Loop through an array of names
echo "Looping through an array:"
NAMES=("Alice" "Bob" "Charlie" "David")
for name in "${NAMES[@]}"; do
echo "Hello, $name!"
done
echo ## Print an empty line for readability
## Loop through a range of numbers
echo "Looping through a range of numbers:"
for i in {1..5}; do
echo "Number: $i"
done
Разберем, что именно делает этот скрипт:
- Первый цикл проходит по массиву имен. Для каждого имени в массиве он выводит приветствие.
- Второй цикл использует диапазон
{1..5}для счета от 1 до 5.
Синтаксис "${NAMES[@]}" может показаться необычным. Символ @ означает «все элементы массива», а кавычки и фигурные скобки гарантируют, что каждый элемент будет обработан как отдельный объект, даже если он содержит пробелы.
Сохраните файл и сделайте его исполняемым с помощью этой команды:
chmod +x for_loop.sh
Команда chmod +x помечает файл как исполняемый, что позволяет запускать его как полноценную программу.
Теперь запустите скрипт:
./for_loop.sh
Вы должны увидеть следующий результат:
Looping through an array:
Hello, Alice!
Hello, Bob!
Hello, Charlie!
Hello, David!
Looping through a range of numbers:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
Это наглядно показывает, как циклы for могут итерироваться как по массивам данных, так и по числовым диапазонам.
Цикл while
Цикл while выполняет блок кода до тех пор, пока заданное условие остается истинным. Это звучит так: «Пока это условие верно, продолжай выполнять действие».
Создайте новый файл while_loop.sh:
touch while_loop.sh
Откройте файл while_loop.sh в WebIDE и вставьте следующий код:
#!/bin/bash
## Simple countdown using a while loop
count=5
echo "Countdown:"
while [ $count -gt 0 ]; do
echo $count
count=$((count - 1))
sleep 1 ## Wait for 1 second
done
echo "Blast off!"
Разберем логику работы скрипта:
- Мы начинаем с
count=5, устанавливая начальное значение для обратного отсчета. - Условие
[ $count -gt 0 ]означает «пока значение переменной count больше 0». - Внутри цикла мы выводим текущее число, уменьшаем его на 1 и ждем одну секунду.
- Процесс повторяется до тех пор, пока
countне станет равным 0, после чего цикл завершается.
Команда sleep 1 приостанавливает выполнение скрипта на 1 секунду, создавая эффект реального обратного отсчета.
Сохраните файл и сделайте его исполняемым:
chmod +x while_loop.sh
Теперь запустите его:
./while_loop.sh
Вы увидите обратный отсчет от 5 до 1 с секундной паузой между числами:
Countdown:
5
4
3
2
1
Blast off!
Это демонстрирует, как цикл while может повторять действие до тех пор, пока условие не перестанет выполняться.
Цикл until
Цикл until похож на while, но с важным отличием: он продолжает выполнение до тех пор, пока условие не станет истинным. То есть: «Делай это, пока не наступит определенное событие».
Создайте новый файл until_loop.sh:
touch until_loop.sh
Откройте файл until_loop.sh в WebIDE и добавьте следующее содержимое:
#!/bin/bash
## Count up to 5 using an until loop
count=1
echo "Counting up to 5:"
until [ $count -gt 5 ]; do
echo $count
count=$((count + 1))
sleep 1 ## Wait for 1 second
done
Разберем этот скрипт:
- Мы устанавливаем начальное значение
count=1. - Условие
[ $count -gt 5 ]означает «пока count не станет больше 5». - Внутри цикла мы выводим текущее число, увеличиваем его на 1 и ждем секунду.
- Цикл работает до тех пор, пока значение не превысит 5.
Сохраните файл и сделайте его исполняемым:
chmod +x until_loop.sh
Запустите скрипт:
./until_loop.sh
Вы увидите числа от 1 до 5, выводимые с интервалом в одну секунду:
Counting up to 5:
1
2
3
4
5
Это пример того, как цикл until повторяет действия до момента достижения заданного условия.
Использование операторов break и continue
Операторы break и continue используются для более тонкого управления потоком внутри циклов. break полностью прерывает выполнение цикла, а continue пропускает оставшуюся часть текущей итерации и переходит к следующей.
Создайте новый файл break_continue.sh:
touch break_continue.sh
Откройте файл break_continue.sh в WebIDE и добавьте следующий код:
#!/bin/bash
## Using break to exit a loop early
echo "Demonstration of break:"
for i in {1..10}; do
if [ $i -eq 6 ]; then
echo "Breaking the loop at $i"
break
fi
echo $i
done
echo ## Print an empty line for readability
## Using continue to skip iterations
echo "Demonstration of continue (printing odd numbers):"
for i in {1..10}; do
if [ $((i % 2)) -eq 0 ]; then
continue
fi
echo $i
done
Разберем логику:
- В первом цикле мы используем
break, чтобы выйти из цикла, как только переменнаяiстанет равна 6. - Во втором цикле мы используем
continue, чтобы пропустить четные числа. Условие$((i % 2)) -eq 0проверяет, делится ли число на 2 без остатка.
Оператор % вычисляет остаток от деления. Таким образом, i % 2 будет равно 0 для четных чисел и 1 для нечетных.
Сохраните файл и сделайте его исполняемым:
chmod +x break_continue.sh
Запустите скрипт:
./break_continue.sh
Вы увидите следующий результат:
Demonstration of break:
1
2
3
4
5
Breaking the loop at 6
Demonstration of continue (printing odd numbers):
1
3
5
7
9
Это наглядно показывает, как break может досрочно завершить цикл, а continue — выборочно пропускать шаги цикла на основе условий.
Резюме
В этой лабораторной работе вы изучили три типа циклов в Bash-скриптах:
- Циклы
for, которые перебирают элементы списка или диапазона чисел. - Циклы
while, которые работают до тех пор, пока условие истинно. - Циклы
until, которые работают до тех пор, пока условие не станет истинным.
Вы также освоили операторы break и continue, которые дают вам полный контроль над поведением циклов.
Эти циклические структуры являются фундаментальной основой многих скриптов и позволяют эффективно автоматизировать повторяющиеся задачи. Практикуйтесь в использовании этих циклов в своих собственных проектах, чтобы лучше понять их особенности и варианты применения.



