Цикл For в Bash. Как выполнить проход по всем элементам массива?

цикл for в bash. как выполнить проход по всем элементам массива?

Базовый синтаксис цикла for

Предметом изучения данного урока является специальная конструкция, позволяющая перебирать последовательности значений и обрабатывать каждые из них отдельно. В Bash такая возможность реализуется за счет цикла for. Стоит уточнить, что for может не только перебирать заранее подготовленные массивы, но и выполняться со счетчиком. Это будет рассмотрено далее в статье.

Ниже мы приводим пример Bash-скрипта c использованием цикла for для перебора различных наборов значений. Сразу за ним разъясняются синтаксические правила написания кода.

#!/bin/bash

#простая последовательность чисел и текста
#всё в одну строку
for value in 'one' 'two' 3 4; do echo $value; done

#на отдельных строках
for value in 'one' 'two' 3 4
do
    echo $value
done

#перебор подготовленного массива в цикле
cities=('Москва' 'Калининград' 'Тула')

for city in ${cities[@]}
do
    echo $city
done

#использование подстановочного механизма
for letter in {a..z}
do
    echo $letter
done

#перебираем результат выполнения команды
for file in $(ls ~/)
do
    echo $file
done

Правила составления обычного цикла for:

  1. Конструкция начинается с ключевого слова for, за которым следует блок инициализации цикла.
  2. Блок инициализации открывается определением переменной, в которую будут записываться значения текущих элементов на каждом этапе выполнения.
  3. После определения переменной размещается ключевое слово in. Оно является своего рода разделителем переменной и списка элементов.
  4. За ключевым словом in происходит определение списка, предназначенного для перебора в цикле. Списком может быть: массив, простой ряд чисел или строк, механизмы подстановки, формирующие последовательности и т.д.
  5. Блок команд, который будет выполняться для каждого элемента, задается между ключевыми словами do и done. Где do — начало, а done — конец.
  6. Если ключевое слово do располагается на одной строке с определением списка, перед ним должна находиться точка с запятой.

Использование цикла со счетчиком

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

Как правило, такого рода циклам передается один параметр целочисленного типа. Он изменяется на каждом этапе выполнения и сравнивается с пороговым значением. При достижении порога цикл завершает свою работу. Учитывая, что изменяемый параметр доступен внутри тела цикла, вы всегда имеете доступ к счетчику текущего витка выполнения.

#!/bin/bash

#применяем цикл со счетчиком
for ((i=1; i<=15 ; i++))
do
    echo $i
done

Правила составления цикла for со счетчиком:

  1. Цикл со счетчиком отличается от базового только блоком инициализации.
  2. Блок инициализации располагается внутри двойных круглых скобок и разделен на три выражения.
  3. Каждое выражение отделяется от другого точкой с запятой «;».
  4. Первое выражение вычисляется всего один раз при старте цикла. Оно задает переменную, которая будет доступна внутри блока команд.
  5. Второе выражение вычисляется в начале каждого витка выполнения. Если его результатом является истина, то цикл продолжает работу.
  6. Третье выражение будет вычисляться в конце каждого витка цикла и, как правило, изменяет значение переменной, заданной в начале блока инициализации.

Важно
Bash, как и другие языки программирования, подвержен проблеме бесконечных циклов. Правильно составляйте выражения инициализации. Если логика построена плохо, может случиться так, что выход из цикла никогда не наступит. Например, бесконечный цикл начнет работу, если оставить все выражения пустыми «for ((;;)); do ...».

Последние публикации