Циклы — одна из фундаментальных концепций языков программирования. Циклы удобны, когда вы хотите выполнить серию команд несколько раз, пока не будет выполнено определенное условие.
В языках сценариев, таких как Bash, циклы полезны для автоматизации повторяющихся задач. В Bash сценариях доступны такие циклы как for, while, и until.
В этом руководстве рассматриваются основы циклов while
в Bash. Мы также покажем вам, как использовать операторы break
и continue
чтобы изменить ход цикла.
Содержание
while
цикл
В while
цикл используется для выполняет заданный набор команд неизвестное число раз до тех пор , как данное условие принимает значение истинно.
Цикл while
Bash имеет следующую форму:
while [CONDITION]
do
[COMMANDS]
done
Оператор while
начинается с ключевого слова while
, за которым следует условное выражение.
Условие оценивается перед выполнением команд. Если условие истинно, команды выполняются. В противном случае, если условие оценивается как ложное, цикл завершается, и управление программой будет передано следующей команде.
В приведенном ниже примере на каждой итерации текущее значение переменной i
печатается и увеличивается на единицу.
i=0
while [ $i -le 2 ]
do
echo Number: $i
((i++))
done
Цикл вторника повторяется до тех пор, пока i
меньше или равно двум. Он выдаст следующий результат:
Number: 0
Number: 1
Number: 2
Бесконечный цикл while
Бесконечный цикл — это цикл, который повторяется бесконечно и никогда не завершается. Если условие всегда истинно, вы получаете бесконечный цикл.
В следующем примере мы используем встроенную команду :
для создания бесконечного цикла. :
всегда возвращает истину. Вы также можете использовать true
встроенный или любой другой оператор, который всегда возвращает true.
while :
do
echo "Press <CTRL+C> to exit."
sleep 1
done
В while
цикл выше будет работать до бесконечности. Вы можете прервать цикл, нажав CTRL+C
Вот однострочный эквивалент:
while :; do echo 'Press <CTRL+C> to exit.'; sleep 1; done
Прочитать файл построчно
Одним из наиболее распространенных использований в while
петли , чтобы прочитать файл, поток данных или переменной построчно.
Вот пример, который считывает файл /etc/passwd
построчно и печатает каждую строку:
file=/etc/passwd
while read -r line; do
echo $line
done < "$file"
Вместо того , чтобы контролировать while
цикл с условием, что мы используем перенаправления ввода ( < "$file"
) , чтобы передать файл на read
команды, которая контролирует цикл. В while
цикл будет выполняться до тех пор , последняя строка не читается.
При чтении файла построчно всегда используйте read
с опцией -r
чтобы обратная косая черта не использовалась как escape-символ.
По умолчанию команда read
обрезает начальные / конечные пробельные символы (пробелы и табуляции). Используйте параметр IFS=
перед read
чтобы предотвратить такое поведение:
file=/etc/passwd
while IFS= read -r line; do
echo $line
done < "$file"
break
и continue
Операторы break
и continue
могут использоваться для управления выполнением цикла while.
break
Оператор break
завершает текущий цикл и передает управление программой команде, которая следует за завершенным циклом. Обычно он используется для завершения цикла при выполнении определенного условия.
В следующем примере выполнение цикла будет прервано, когда текущий повторяемый элемент станет равным 2
.
i=0
while [ $i -lt 5 ]
do
echo "Number: $i"
((i++))
if [[ "$i" == '2' ]]; then
break
fi
done
echo 'All Done!'
Number: 0
Number: 1
All Done!
continue
Оператор continue
завершает текущую итерацию цикла и передает управление программой следующей итерации цикла.
В нижеследующем ниже, как только текущий повторяемый элемент равен 2
оператор continue
заставит выполнение вернуться к началу цикла и продолжить следующую итерацию.
i=0
while [ $i -lt 5 ]
do
((i++))
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
echo 'All Done!'
Number: 1
Number: 3
Number: 4
Number: 5
All Done!
Выводы
В while
цикл многократно выполняет заданный набор команд до тех пор , как условие истинно.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
не работает ваш линукс , вот пример :
while :
do
wget -c file_url
sleep 30
done
если выключить интернет а потом включить закачка не возобновится .
в то время, как космические корабли бороздят просторы вселенной, у отдельных специалистов не работают скрипты в 5 строк.