Unix / Linux - Управление циклами
Здравствуйте, будущие программисты! Сегодня мы окунемся в захватывающий мир управления циклами в скриптах shell Unix и Linux. Как ваш доброжелательный сосед-компьютерный учитель, я здесь, чтобы провести вас через это путешествие, шаг за шагом. Не волнуйтесь, если вы новички в программировании - мы начнем с азов и постепенно поднимемся. Так что возьмите кружку кофе (или чая, если это ваше дело), и давайте начнем цикл!
Понимание циклов
Прежде чем перейти к управлению циклами, давайте быстро освежим в памяти, что такое циклы. Представьте, что вам нужно написать "Я люблю программирование" на доске 100 раз. Вместо того чтобы писать это вручную 100 раз, вы можете использовать цикл для автоматизации этой повторяющейся задачи. Именно так и работают циклы в программировании - они позволяют нам выполнять набор команд многократно, не записывая их снова и снова.
Бесконечный цикл
Теперь давайте поговорим о чем-то и fascинирующем, и потенциально опасном: бесконечном цикле. Это как карусель, которая никогда не останавливается - она просто продолжает двигаться и двигаться.
Что такое бесконечный цикл?
Бесконечный цикл - это цикл, который продолжается indefinitely, потому что его условие завершения никогда не выполняется. Хотя это может показаться рецептом катастрофы, на самом деле есть некоторые сценарии, где бесконечные циклы полезны (мы доберемся до этого позже).
Пример бесконечного цикла
Вот простой пример бесконечного цикла в скрипте shell:
#!/bin/bash
while true
do
echo "This is an infinite loop!"
sleep 1
done
В этом скрипте:
-
while true
создает условие, которое всегда истинно, поэтому цикл никогда не останавливается. -
echo
выводит наше сообщение. -
sleep 1
暂停 скрипт на 1 секунду перед следующей итерацией.
Если вы запустите этот скрипт, вы увидите "This is an infinite loop!" выводимый каждую секунду, пока вы вручную не остановите скрипт (обычно, нажав Ctrl+C).
Когда мы можем использовать бесконечные циклы?
С трудом верится, но бесконечные циклы не всегда плохи! Они могут быть полезны в таких сценариях, как:
- Создание программы, которая должна работать непрерывно (например, сервер).
- Реализация системы меню, где пользователь может повторно выбирать опции.
- Мониторинг систем для конкретных событий или условий.
只是记住, с великой силой приходит великая ответственность. Всегда убедитесь, что у вас есть способ выйти из своих бесконечных циклов, когда это необходимо!
Оператор break
Теперь, когда мы видели, как циклы могут продолжаться forever, давайте узнаем, как остановить их, когда мы хотим. Встречайте оператор break
- ваш аварийный выход из любого цикла.
Что делает break?
Оператор break
делает exactly то, что вы думаете - он "прерывает" текущий цикл, независимо от того, все еще истинно ли условие цикла.
Пример использования break
Давайте изменим наш предыдущий бесконечный цикл, чтобы он останавливался после 5 итераций:
#!/bin/bash
count=0
while true
do
echo "Loop iteration: $count"
count=$((count + 1))
if [ $count -eq 5 ]
then
echo "Breaking the loop!"
break
fi
sleep 1
done
echo "Loop has ended."
В этом скрипте:
- Мы�始化 переменную
count
для отслеживания итераций. - Каждая итерация, мы увеличиваем
count
и проверяем, равен ли он 5. - Если
count
равен 5, мы выводим сообщение и используемbreak
для выхода из цикла.
Когда вы запустите этот скрипт, вы увидите, что он досчитает до 5 и затем остановится.
Оператор continue
Хотя break
позволяет нам выйти из цикла полностью, иногда мы просто хотим пропустить оставшуюся часть текущей итерации и перейти к следующей. Вот где comes в handy оператор continue
.
Что делает continue?
Оператор continue
пропускает оставшуюся часть текущей итерации цикла и переходит к следующей итерации.
Пример использования continue
Давайте создадим скрипт, который выводит числа от 1 до 10, но пропускает четные числа:
#!/bin/bash
for i in {1..10}
do
if [ $((i % 2)) -eq 0 ]
then
continue
fi
echo $i
done
В этом скрипте:
- Мы используем цикл
for
для итерации от 1 до 10. -
if [ $((i % 2)) -eq 0 ]
проверяет, является ли число четным (делится на 2 без остатка). - Если число четное,
continue
пропускает оставшуюся часть текущей итерации. - В противном случае, мы выводим число.
Когда вы запустите этот скрипт, вы увидите только нечетные числа: 1, 3, 5, 7, 9.
Все вместе
Теперь, когда мы узнали о бесконечных циклах, break
и continue
, давайте создадим более сложный пример, который использует все эти концепции:
#!/bin/bash
echo "Welcome to the Number Guessing Game!"
secret_number=$((RANDOM % 10 + 1))
attempts=0
while true
do
read -p "Guess a number between 1 and 10 (or 'q' to quit): " guess
if [ "$guess" = "q" ]
then
echo "Thanks for playing! The secret number was $secret_number."
break
fi
if ! [[ "$guess" =~ ^[0-9]+$ ]]
then
echo "Please enter a valid number or 'q' to quit."
continue
fi
attempts=$((attempts + 1))
if [ "$guess" -eq "$secret_number" ]
then
echo "Congratulations! You guessed the number in $attempts attempts!"
break
elif [ "$guess" -lt "$secret_number" ]
then
echo "Too low! Try again."
else
echo "Too high! Try again."
fi
done
Этот скрипт создает простую игру угадывания чисел, которая демонстрирует:
- Бесконечный цикл для поддержания работы игры.
- Использование
break
для выхода, когда玩家 угадал число или решил выйти. - Использование
continue
для пропуска недопустимых вводов.
Резюме по управлениям циклами
Вот быстрый справочный стол с управлениями циклами, которые мы изучили:
Оператор | Описание | Сценарий использования |
---|---|---|
while true |
Создает бесконечный цикл | Когда вам нужно, чтобы цикл работал непрерывно до определенного условия |
break |
Выход из текущего цикла | Когда вы хотите остановить цикл на основе определенного условия |
continue |
Пропускает оставшуюся часть текущей итерации | Когда вы хотите пропустить оставшуюся часть текущей итерации на основе условия |
Помните, циклы - это мощные инструменты в программировании, но с великой силой приходит великая ответственность. Всегда убедитесь, что у вас есть способ выйти из своих циклов, и используйте break
и continue
с умом, чтобы создавать эффективные и эффективные скрипты.
Счастливого кодирования, будущие мастера скриптов shell! Пусть ваши циклы будут бесконечными только тогда, когда вы этого хотите, и пусть ваши операторы break
всегда будут под рукой. До свидания, продолжайте учиться и программировать!
Credits: Image by storyset