В программировании или написании сценариев цикл – одна из самых основных и мощных концепций. Цикл выполняет определенные задачи, пока не будут выполнены указанные условия. У каждого языка программирования или сценариев есть разные способы реализации концепции.
В этой статье ознакомьтесь с вложенным циклом в сценариях bash.
Цикл, по определению, выполняет определенные задачи до тех пор, пока не будут выполнены условия. Что, если в задачу входит запуск цикла? Это концепция вложенного цикла. Петля внутри петли.
Это основная структура петли.
while ( условие ){ # что-нибудь }
Здесь цикл while будет продолжать выполнять задачи, объявленные внутри блока, пока выполняется условие. В случае вложенного цикла while структура будет выглядеть так.
# основной цикл while ( условие ) { # вложенный цикл while ( условие ) { # что-нибудь } }
Теоретически вложенные циклы могут достигать бесконечной глубины. Во многих ситуациях вложенные циклы могут быть идеальным решением.
Bash – мощный язык сценариев. В bash есть разные структуры циклов. Самые популярные – это циклы for, while и until. Если вы раньше были знакомы с программированием на C/C++, то синтаксис определенно будет очень похож.
Цикл For – один из наиболее распространенных и универсальных выходов форм и т. д. Структура циклов в сценариях bash. Структура также очень похожа на цикл for в C/C ++.
Структура цикла for в bash следующая.
for ( ( инициализировать; условие; приращение ) ) ; do # что-нибудь done
Структура очень понятна. Раздел инициализации не является обязательным. Однако условие и приращение имеют более высокий приоритет.
Приступим к делу. Вот очень упрощенный сценарий bash, реализующий цикл for.
for ((i = 0 ; i < 5 ; i++)); do echo «привет мир» done
Также можно использовать список/диапазон в качестве условия цикла. Это особенно полезно при работе со списком файлов, диапазонами номеров, массивами, выходными данными команд и т. д. Структура выглядит примерно так.
for item in <list>; do # что-нибудь done
Например, следующий сценарий напечатает «привет мир» пять раз.
for i in {1..5}; do echo «привет мир» done
Что, если нам нужно работать с содержимым каталога? В следующем примере сценарий распечатает все файлы в каталоге /usr/bin.
for i in /usr/bin/*; do echo $i done
Теперь, что нам делать, чтобы иметь вложенный цикл for? Это просто один цикл внутри другого. Вот вложенный цикл for из предыдущего примера.
for ((i = 0 ; i < 3 ; i++)); do for((j = 0 ; j < 2 ; j++)); do echo "привет мир" done done
6 раз будет выведено «привет мир». Внешний цикл будет выполняться три раза, внутренний цикл – два раза.
Цикл while – еще один популярный и интуитивно понятный цикл, доступный в сценариях bash. Синтаксис выглядит так.
while < условие > ; do # что-нибудь done
В следующем примере скрипт пять раз напечатает «привет мир».
num=1 while [ $num -le 5 ]; do echo "привет мир" num=$(($num+1)) done
Как бы выглядел вложенный цикл while? Вот простой пример.
num_a=1 num_b=1 while [ $num_a -le 5 ]; do while [ $num_b -le 5 ]; do echo "привет мир" num_b=$(($num_b+1)) done num_a=$(($num_a+1)) done
Если у вас есть опыт программирования на C/C ++, то вы знакомы с циклом do-while. К сожалению, в bash ничего подобного нет. Однако до тех пор, пока цикл не работает аналогичным образом. Синтаксис также выглядит точно так же.
until [ < условие > ]; do # что-нибудь done
Разница между циклом while и until – это условие проверки. Пока выполняется условие проверки, цикл while будет продолжать работать. Однако цикл до тех пор, пока не будет выполняться, будет выполняться только в том случае, если условие ложно.
Вот быстрый пример цикла while. Он напечатает таблицу умножения 2.
num_a=1 until [ $num_a -gt 10 ]; do echo $(($num_a * 2)) num_a=$(($num_a+1)) done
В определенных ситуациях при соблюдении определенных условий выполнение остальной части цикла становится избыточным. Разрывы цикла – это интересная функция, позволяющая выйти из цикла при заданном условии. Это более важно для вложенных циклов, поскольку чем выше количество циклов, тем больше потребление ресурсов и неэффективность.
Здесь следующий цикл for прекратит выполнение, как только достигнет условия.
for ((i=1;i<=100;i++)); do echo $i if [ $i -eq 10 ]; then break fi done
Узнайте, как разорвать цикл while, чтобы получить подробное объяснение и демонстрацию разрывов цикла.
Вложенный цикл – это простая и эффективная концепция для понимания и реализации. Надеюсь, эта статья смогла описать и продемонстрировать концепцию.