ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Вложенный цикл в примерах сценария Bash

Bash Heredoc

В программировании или написании сценариев цикл – одна из самых основных и мощных концепций. Цикл выполняет определенные задачи, пока не будут выполнены указанные условия. У каждого языка программирования или сценариев есть разные способы реализации концепции.

В этой статье ознакомьтесь с вложенным циклом в сценариях bash.

 

Вложенный цикл

Цикл, по определению, выполняет определенные задачи до тех пор, пока не будут выполнены условия. Что, если в задачу входит запуск цикла? Это концепция вложенного цикла. Петля внутри петли.

Это основная структура петли.

while ( условие ){

# что-нибудь

}

Здесь цикл while будет продолжать выполнять задачи, объявленные внутри блока, пока выполняется условие. В случае вложенного цикла while структура будет выглядеть так.

# основной цикл

while ( условие ) {

# вложенный цикл

while ( условие ) {

# что-нибудь

}
}

 

Теоретически вложенные циклы могут достигать бесконечной глубины. Во многих ситуациях вложенные циклы могут быть идеальным решением.

 

Цикл в сценарии bash

Bash – мощный язык сценариев. В bash есть разные структуры циклов. Самые популярные – это циклы for, while и until. Если вы раньше были знакомы с программированием на C/C++, то синтаксис определенно будет очень похож.

 

Цикл For

Цикл 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

Цикл 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

Цикл until

Если у вас есть опыт программирования на 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, чтобы получить подробное объяснение и демонстрацию разрывов цикла.

 

Последние мысли

Вложенный цикл – это простая и эффективная концепция для понимания и реализации. Надеюсь, эта статья смогла описать и продемонстрировать концепцию.

Exit mobile version