Как использовать цикл For в Bash в Linux

12 set 2022 3 min di lettura
Как использовать цикл For в Bash в Linux
Indice dei contenuti

Введение

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

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

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

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

Синтаксис

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

Цикл for в Bash имеет следующий вид:

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}
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

Bash для цикла C-стиль

Синтаксис в стиле C имеет следующий вид:

for ((INITIALIZATION; TEST; STEP))
 do
 [COMMANDS]
 done

Партия INITIALIZATION воспроизводится только один раз при запуске цикла. Затем оценивается часть TEST. Если оно ложно, цикл for завершается. Если значение TEST истинно, команды в теле цикла 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 могут использоваться для управления выполнением цикла for.

Заявление о перерыве

Оператор 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 завершает текущую итерацию цикла и передает управление программе следующей итерации цикла.

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

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

Примеры Bash для цикла

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

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

Пройдемся по коду построчно:

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

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

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

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

Пройдемся по коду построчно:

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

Вывод

К этому моменту вы уже должны хорошо понимать, как использовать цикл for в bash для прокрутки списков.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.