Bash цикл For

Bash For Loop

21 Июня 2020 | Терминал

В этом уроке мы рассмотрим основы циклов for в Bash. Мы также покажем вам , как использовать break и continue, чтобы изменить поток цикла.

Bash цикл For

Циклы являются одним из фундаментальных понятий языков программирования. Циклы удобны, когда вы хотите запускать серию команд снова и снова, пока не будет достигнуто определенное условие.

В языках сценариев, таких как Bash, циклы полезны для автоматизации повторяющихся задач.

В скриптах Bash есть три базовых конструкции for, while и until.


Стандартный цикл for 

for Цикл перебирает список элементов и выполняет данный набор команд.

Цикл Bash for принимает следующую форму:

for item in [LIST]
do
  [COMMANDS]
done
 

Список может быть последовательностью строк, разделенных пробелами, диапазоном чисел, выводом команды, массивом и так далее.


Зацикливание строк

В приведенном ниже примере цикл будет перебирать каждый элемент в списке строк, и переменная element будет установлена ​​на текущий элемент:

for element in Hydrogen Helium Lithium Beryllium
do
  echo "Element: $element"
done
 

Цикл выдаст следующий вывод:

Element: Hydrogen
Element: Helium
Element: Lithium
Element: Beryllium
 


Цикл по диапазону номеров 

Вы можете использовать выражение последовательности, чтобы указать диапазон чисел или символов, задав начальную и конечную точку диапазона. Выражение последовательности принимает следующую форму:

{START..END}
 

Вот пример цикла, который перебирает все числа от 0 до 3:

for i in {0..3}
do
  echo "Number: $i"
done
 

Number: 0
Number: 1
Number: 2
Number: 3
 

Начиная с Bash 4, также можно указать приращение при использовании диапазонов. Выражение принимает следующую форму:

{START..END..INCREMENT}
 

Вот пример, показывающий, как увеличить на 5:

for i in {0..20..5}
do
  echo "Number: $i"
done
 

Number: 0
Number: 5
Number: 10
Number: 15
Number: 20
 


Цикл на элементах массива 

Вы также можете использовать for цикл для перебора массива элементов.

В приведенном ниже примере мы определяем массив с именем BOOKS и выполняем итерацию по каждому элементу массива.

BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby')

for book in "${BOOKS[@]}"; do
  echo "Book: $book"
done
 

Book: In Search of Lost Time
Book: Don Quixote
Book: Ulysses
Book: The Great Gatsby
 

Синтаксис цикла в стиле C

Синтаксис цикла в стиле C for принимает следующую форму:

for ((INITIALIZATION; TEST; STEP))
do
  [COMMANDS]
done
 
INITIALIZATION Часть выполняется только один раз , когда начинается цикл. Затем TEST часть оценивается. Если оно ложно, цикл прерывается. Если значение TEST равно true, команды внутри тела for цикла выполняются, а STEP часть обновляется.

В следующем примере кода цикл начинается с инициализации i = 0 и перед каждой итерацией проверяет, является ли i ≤ 10 . Если true, он печатает текущее значение i и [увеличивает переменную] i на 1 ( i++ ), иначе цикл завершается.

for ((i = 0 ; i <= 1000 ; i++)); do
  echo "Counter: $i"
done
 

Цикл повторяется 1001 раз и выдает следующий результат:

Counter: 0
Counter: 1
Counter: 2
...
Counter: 998
Counter: 999
Counter: 1000
 

break и continue заявления

break  и continue  могут быть использованы для управления для выполнения цикла.

break 

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

В следующем примере мы используем if инструкцию, чтобы завершить выполнение цикла, когда текущий повторяющийся элемент равен «Lithium».

for element in Hydrogen Helium Lithium Beryllium; do
  if [[ "$element" == 'Lithium' ]]; then
    break
  fi
  echo "Element: $element"
done

echo 'All Done!'
 

Element: Hydrogen
Element: Helium
All Done!
 

continue  

Оператор continue завершает текущую итерацию цикла и передает управление программой к следующей итерации цикла.

В следующем примере мы перебираем диапазон чисел. Когда текущий элемент continue с итерацией равен '2', оператор заставит выполнение вернуться к началу цикла и продолжить следующую итерацию:

for i in {1..5}; do
  if [[ "$i" == '2' ]]; then
    continue
  fi
  echo "Number: $i"
done
 

Number: 1
Number: 3
Number: 4
Number: 5
 

Примеры цикла for Bash 

Переименование файлов с пробелами в имени файла

В следующем примере показано, как переименовать все файлы в текущем каталоге с пробелом в его именах, заменив пробел подчеркиванием:

for file in *\ *; do
  mv "$file" "${file// /_}"
done
 

Давайте разберем код построчно:

  • Первая строка создает for цикл и перебирает список всех файлов с пробелом в имени. Выражение *\ * создает список.
  • Вторая строка применяется к каждому элементу списка и перемещает файл в новый, заменяя пробел подчеркиванием ( _ ). Часть ${file// /_} использует расширение параметра оболочки для замены шаблона в параметре на строку.
  • done  указывает на конец сегмента цикла.

Изменение расширения файла 

В следующем примере показано, как использовать for цикл Bash для переименования всех файлов, заканчивающихся на .jpeg в текущем каталоге, заменив расширение файла с .jpeg на .jpg.

for file in *.jpeg; do
    mv -- "$file" "${file%.jpeg}.jpg"
done
 

Давайте проанализируем код построчно:

  • Первая строка создает for цикл и просматривает список всех файлов, заканчивающихся на «.jpeg».
  • Вторая строка применяется к каждому элементу списка и перемещает файл в новый, заменяя «.jpeg» на «.jpg». ${file%.jpeg} удалить часть «.jpeg» из имени файла, используя расширение параметра оболочки
  • done  указывает на конец сегмента цикла.


Вывод

Цикл Bash for используется для многократного выполнения заданного набора команд в течение фиксированного числа раз.


    Комментарии

    Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Загрузка комментариев...