Bash 'For' Loop: Учебное пособие и примеры

Bash (Bourne Again Shell) - это командная строка оболочки и язык сценариев в операционных системах GNU / Linux. Это оболочка по умолчанию для большинства дистрибутивов Linux.

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

Введение

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

Общий синтаксис

Общий синтаксис для за цикл в Bash:

для дела ... ... сделано

Здесь - это переменная Bash, которая должна быть допустимым именем переменной оболочки Linux, т. е. имя содержит комбинацию букв (az, AZ), цифр (0-9) и подчеркивания (_) и должно начинаться либо с буквы, либо с подчеркивание.

В - это либо настраиваемый диапазон целочисленных индексов, которые будут зацикливаться, либо настраиваемый список целых чисел или строк. Он также может содержать другую команду Linux, однако вывод такой команды должен быть разделен пробелами или символами новой строки, т. Е. Анализироваться Bash в список (список в Bash в основном представляет собой набор значений, разделенных пробелом или новой строкой. ).

Какие бы команды ни выполнялись, они должны быть помещены в сделать .. сделано блокировать.

Давайте посмотрим на несколько простых примеров.

Цикл по диапазону целочисленных значений: Следующий код создает каталоги с именами dir1, dir2, dir3 до dir10.

для i в {1..10} do mkdir dir $ i done

Цикл по списку фиксированных значений: Следующий код печатает каждую строку или целое число в заданном фиксированном списке.

для i in Привет 1 2 3 Пока! сделать эхо $ я сделал

Цикл при выводе команды: Следующий код перебирает вывод ls и печатает имя каждого файла в заданном формате.

for i in `ls` do echo" Filename is $ i "готово

Синтаксис на основе выражений

В Bash также возможен синтаксис на основе выражений, аналогичный языку программирования C:

for ((Выражение 1; Выражение 2; Выражение 3)) do ... ... done

Здесь, Выражение 1 инициализация индексных переменных. Выражение 2 условие выхода из цикла; это условие проверяется на каждой итерации. Выражение 3 указывает увеличение / уменьшение / изменение значения индексной переменной (ей)

В следующем примере просто выводятся значения от 0 до 4:

for ((i = 0; i <5; i ++)) do echo $ i done

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

for ((;;)) do echo "Нажмите Ctrl-C, чтобы остановить" готово

Прервать и продолжить

Оператор Break для условного выхода

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

for ((i = 0; i <10; i ++)) do if [[$ i -eq 5]] then break else echo $ i; фи сделано

Вышеупомянутый цикл будет печатать числа от 0 до 4. Затем, когда значение i будет 5, он выйдет из цикла. Это особенно полезно, когда нужно выйти из цикла, когда команда дает определенный вывод. Например, следующий цикл прерывается, если и когда он находит пустой файл.

для файла в `ls` do flen =` wc -c $ file` if [["$ flen" = "0 $ file"]] то echo "$ file is empty" break else echo $ flen fi done 

Команда туалет -c печатает количество строк в файле . Он печатает его в формате , Например, 10 test.txt. Мы выходим из цикла, когда количество строк равно 0, то есть пустой файл.

Оператор Continue для условного пропуска итерации

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

for ((i = 0; i <10; i ++)) do if [[$ i -eq 5]] then continue fi echo $ i; Выполнено

Вышеупомянутый цикл будет печатать числа от 0 до 10, кроме 5, потому что во время итерации я = 5 есть оператор continue, который пропустит остальную часть кода в цикле в начале с итерацией я = 6.

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

для файла в `ls` do if [[-d $ file]] затем продолжить fi wc -c" $ file "done

[[-d $ файл]] проверяет, является ли файл каталогом. Если это так, то мы переходим к следующему файлу, то есть к следующей итерации. Если это не каталог, мы печатаем количество строк в файле, используя Туалет команда, как показано ранее.

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

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

Или же пользователь может сохранить это в файле сценария и выполнить файл сценария.

В #! / bin / bash в начале указывает интерпретатор, который будет использоваться при выполнении файла. Хотя Bash является наиболее часто используемой оболочкой в ​​настоящее время, некоторые пользователи предпочитают такие оболочки, как zsh, который следует указать вместо bash в начале этого файла.

Чтобы дать разрешения на выполнение для этого файла запустите:

chmod + x test.sh

Ну наконец то, выполнить файл, бегать:

./test.sh

Вывод

В за Цикл в Bash - довольно простая функция, но ее можно использовать почти во всех сложных сценариях написания сценариев. Изучение этого имеет большое значение, независимо от того, являетесь ли вы обычным или опытным пользователем Linux или только начинаете изучать автоматизацию для задач системного администрирования и DevOps.

Категория: Linux