9 примеров циклов for в скриптах Linux Bash

Командная строка Linux на ноутбуке на синем фоне.

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

Цикл for

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

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

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

В тело цикла содержит код, который вы хотите повторить. Он содержит то, что вы хотите, чтобы цикл делать. Тело цикла может содержать любую допустимую команду скрипта.

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

Простой для циклов

Если вы хотите написать свой первый цикл for, эти простые примеры помогут вам начать работу.

для циклов с использованием числовых списков

Вы можете запустить цикл for в командной строке. Эта команда создает и выполняет простой цикл for. Итератор — это переменная с именем i. Мы собираемся присвоить i каждому из значений в списке чисел по очереди. Тело цикла будет печатать это значение в окне терминала. Условие, которое заканчивает этот цикл, — это когда я перебрал весь список чисел.

для я в 1 2 3 4 5; эхо $i; Выполнено

a для счета циклов от 1 до 5

Здесь важно отметить, что переменная i увеличивается на единицу каждый раз, когда цикл вращается, но это потому, что список чисел каждый раз увеличивается на единицу.

Этот список чисел начинается с 3 и увеличивается с шагом в два, а затем произвольно увеличивается до 44.

для i в 3 5 7 9 11 44; эхо $i; Выполнено

a для подсчета циклов через непоследовательный список чисел

Это не имеет значения для цикла for. Он начинается с одного конца списка и использует каждое значение по очереди, пока не будут использованы все значения в списке.

Номера также не должны быть в порядке возрастания. Они могут быть в любом порядке.

для i в 3 43 44 11 9; эхо $i; Выполнено

a для подсчета циклов по несортированному списку чисел

для циклов с использованием списков слов

Точно так же мы можем сделать то же самое со словами. Скопируйте текст сценария в редактор и сохраните его как «word-list.sh».

#!/bin/bash for word in Это последовательность слов do echo $word done

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

chmod +x список слов.sh

Делаем скрипт исполняемым с помощью chmod

Запустим скрипт.

./список слов.sh

Цикл for, работающий со списком слов

Как и в случае с числами, итератор — в этом примере переменное слово — проходит через список элементов данных, пока не достигнет конца списка. Тело цикла обращается к значению переменной word, поэтому обрабатывается каждое слово в списке.

для циклов с диапазонами номеров

Если вы хотите, чтобы цикл for выполнялся 100 раз, было бы довольно утомительно вводить последовательность из 100 чисел в заголовке цикла. Диапазоны номеров позволяют указать только первое и последнее число.

Этот скрипт называется «number-range.sh».

#!/bin/bash for i in {1..10} do echo «Вращение цикла:» $i done

Диапазон номеров определяется в фигурных скобках «{}» с двумя точками «..», разделяющими числа, которые начинают и заканчивают диапазон. Убедитесь, что в определении диапазона нет пробелов.

Вот как это работает:

./диапазон чисел.sh

Цикл for с использованием диапазона чисел

Вы можете включить другое число, определяющее размер шага, который итератор должен использовать для обхода чисел в диапазоне. Этот скрипт, «number-range2.sh», будет использовать диапазон от 0 до 32 и размер шага 4.

#!/bin/bash for i in {0..32..4} do echo «Вращение цикла:» $i done

Итератор проходит через диапазон чисел с шагом четыре.

./диапазон чисел2.sh

Цикл for с шагом итератора 4

для циклов с использованием имен файлов

Поскольку мы можем обрабатывать списки слов, мы можем заставить наши скрипты работать с именами файлов. Этот скрипт называется «filenames.sh».

#!/bin/bash для файла в word-list.sh number-range.sh number-range2.sh filenames.sh do ls -lh «$file» done

Было бы совершенно бессмысленно иметь сценарий, который делает только то, что может сделать ls, но он демонстрирует, как получить доступ к именам файлов внутри тела цикла.

./имя_файла.sh

Цикл for, использующий список имен файлов

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

Этот сценарий называется «filenames2.sh». Мы заменили список имен файлов шаблоном имени файла «*.sh», чтобы сценарий сообщал обо всех файлах сценариев в текущем каталоге.

#!/bin/bash для файла в *.sh do ls -lh «$file» готово

Вот результат.

./filenames2.sh

Цикл for с использованием файлового шаблона *.sh

для циклов с использованием параметров командной строки

Мы можем добавить больше гибкости, передав шаблон имени файла в командной строке. Переменная $* представляет все параметры командной строки, переданные сценарию.

Это «filenames3.sh».

#!/bin/bash для файла в $* do ls -lh «$file» готово

Мы будем запрашивать имена файлов, которые начинаются с «n» и имеют расширение SH.

./filenames3.sh n*.sh

Цикл for, принимающий шаблон файла в качестве параметра командной строки

Мы также можем передавать более одного шаблона одновременно.

./filenames3.sh n*.sh .bashrc

Цикл for, принимающий шаблон файла и параметры командной строки имени файла

Файл переменных итератора принимает значение каждого из параметров командной строки. Шаблоны имен файлов расширяются, и все имена файлов обрабатываются в теле цикла.

C-подобный для циклов

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

  • Начальное значение итератора цикла.
  • Тест на то, продолжается ли цикл или заканчивается.
  • Увеличение или уменьшение итератора.

Это скрипт «c-like.sh».

Итератору I присваивается значение 1 в начале цикла, и цикл будет выполняться до тех пор, пока утверждение «i<=10» истинно. Как только я достигну 11, цикл for остановится. Итератор увеличивается на единицу при каждом обороте цикла.

#!/bin/bash for (( i=1; i<=10; i++ )) do echo "Номер цикла:" $i done

Запустим этот скрипт.

./c-like.sh

Трехчленный или C-подобный цикл for

C-подобный цикл for позволяет легко создавать циклы for с немного необычными требованиями. Этот цикл начинается с 15 и отсчитывается назад с шагом 3. Это «c-like2.sh».

#!/bin/bash for (( i=15; i>0; i-=3 )) do echo «Номер цикла:» $i done

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

./c-like2.sh

C-подобный цикл с отсчетом в обратном направлении

Бесконечные циклы

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

#!/bin/bash for (( ; ; )) do echo «Нажмите Ctrl+C, чтобы остановить…» sleep 1 done

Вам нужно будет нажать Ctrl+C, чтобы остановить цикл.

./бесконечный.ш

Бесконечный C-подобный цикл for

для циклов с использованием массивов слов

Мы можем легко перебрать массив слов. Нам нужно указать имя массива в заголовке цикла, и итератор пройдется по всем записям в массиве. Это «word-array.sh».

#!/bin/bash Distributions=(«Ubuntu Fedora Manjaro Arch EndeavourOS Garuda») для дистрибутива в $distributions do echo $distro done

Все дистрибутивы перечислены для нас.

./слово-массив.sh

Цикл for с использованием массива слов

Команда продолжения

Если вы хотите, чтобы цикл проходил через определенную запись, проверьте, соответствует ли итератор этой записи, и используйте команду continue. Команда continue отменяет Текущий вращение петли. Он увеличивает итератор и запускает следующий цикл цикла — при условии, что запись, которую вы хотите пропустить, не является последним элементом в списке.

Это «word-array2.sh». Он обходит элемент массива Arch, но обрабатывает все остальные элементы массива.

#!/bin/bash Distributions=(«Ubuntu Fedora Manjaro Arch EndeavourOS Garuda») для дистрибутива в $distributions do if [[ «$distro» == «Arch» ]]; затем продолжайте fi echo $distro done

«Арка» не отображается в окне терминала.

./слово-массив2.ш

Цикл for, пропускающий запись в массиве слов из-за команды continue

Команда перерыва

Команда break прерывает цикл и предотвращает дальнейшую обработку.

Это «word-array3.sh». Это то же самое, что и предыдущий скрипт, но с заменой continue на break.

#!/bin/bash Distributions=(«Ubuntu Fedora Manjaro Arch EndeavourOS Garuda») для дистрибутива в $distributions do if [[ «$distro» == «Arch» ]]; затем сломайте fi echo $distro done

Когда итератор содержит «Arch», цикл for прекращает дальнейшую обработку.

./слово-массив3.ш

Цикл for, прервавший дальнейшую обработку из-за команды break

для циклов с использованием ассоциативных массивов

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

Мы можем перебирать ассоциативный массив, используя цикл for. Этот сценарий называется «associative.sh». Он определяет ассоциативный массив с четырьмя элементами, по одному для каждого из слов «собака», «кошка», «робин» и «человек». Это ключи. Значения представляют собой (по умолчанию) количество ног, которые они имеют.

#!/bin/bash declare -A animals=( [dog]= Четвероногий [cat]= Четвероногий [robin]= Двуногий [human]=Two-legged ) для ног в ${!animals[@]} делать, если [ ${animals[$legs]} == «Двуногий» ]; затем эхо ${legs} готово

Итератор называется ногами. Обратите внимание, что заголовок цикла содержит «!» восклицательный знак. Это не действует как логический оператор НЕ, это часть синтаксиса ассоциативного массива. Требуется выполнить поиск по массиву.

Тело цикла выполняет проверку сравнения строк. Если значение члена массива «Двуногий», он выводит значение ключа в окно терминала. Когда мы его запускаем, скрипт печатает двуногих существ.

./ассоциативный.ш

Использование цикла for для извлечения элементов из ассоциативного массива

Итерация вывода команд

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

Этот скрипт называется «command.sh». он использует ls и wc для предоставления отсортированного списка имен файлов сценария вместе с количеством строк, слов и байтов.

#!/bin/bash for i in $(ls *.sh | sort); выполнить эхо $(wc $i)

Когда мы запускаем его, мы получаем статистику для каждого файла, причем файлы перечислены в алфавитном порядке.

./команда.ш

Использование цикла for для перебора вывода двух конвейерных команд

Ослепительная петля for

Цикл for — универсальный и понятный инструмент для написания сценариев. Но каким бы гибким он ни был, не забывайте, что другие циклы существуют не просто так. Не думайте, что цикл for — это все, что вам когда-либо понадобится.

Например, цикл while гораздо лучше подходит для определенных задач, чем цикл for, например для чтения строк из файла.

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

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован.