Android

Баш за петлю

Shell Scripting - For Loops

Shell Scripting - For Loops

Оглавление:

Anonim

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

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

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

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

Стандартный Bash For Loop

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

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

for item in do 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

C-стиль Bash для петли

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

for ((INITIALIZATION; TEST; STEP)) do done

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

Перерыв Заявление

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

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

for element in Hydrogen Helium Lithium Beryllium; do if]; 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]; then continue fi echo "Number: $i" done

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

Bash For Loop Примеры

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

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

Вывод

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

терминал петли bash