BASH описание на цикли for, while, until и примери за използване

bash
Кратко описание на разликата в типовете цикли:

for - ще извърши действие, докато има обекти за изпълнение (например четене на поток от stdin, файл или функция); while - извършва действие, докато условието е вярно; до - ще се изпълнява, докато условието стане истина, т.е. стига да е невярно.

Помислете за тази версия на скрипта с цикъл:

Синтаксисът е много прост и е доста ясно показан в примера:

for (стартиране на цикъла) променлива (деклариране на променлива за извършване на действия) в (насочване на потока към цикъла) `ls -1` (команда, която трябва да бъде изпълнена и предадена на променливата $variable). Do и done са "тялото" на цикъла, в рамките на което ще се извършват основните действия върху получените данни, а echo "$variable" е самото действие, извършвано от цикъла.

Сега нека променим малко примера и вместо изрично да посочим командата, ще приложим втората променлива:

Сега командата ls -1 се предава в отделна променлива, което позволява по-гъвкава работа с цикъла. Вместо променлива в цикъл, можете също да използвате функция:

Основното условие на for цикъла е, че той ще се изпълнява, докато подадената му команда има обекти за действие. Въз основа на примера по-горе - докато има файлове за показване в списъка ls -1 - цикълът ще ги предаде на променлива и ще изпълни "тялото на цикъла". Веднага щом списъкът с файлове в директорията приключи, цикълът ще завърши своето изпълнение.

Нека усложним малко примера.

Директорията съдържа списък с файлове:

Трябва да изберем от тях само тези, които нямат думата "не" в заглавието:

Можете също да използвате условни изрази в цикъл.(условни изрази) […] за проверка на условията и командата break за прекъсване на цикъла, ако условието се задейства.

Помислете за този пример:

Цикълът ще работи, докато не бъде открит файлът loop.sh. Веднага след като изпълнението на цикъла достигне този файл, цикълът ще бъде прекъснат от командата break:

Друг пример е използването на аритметични операции точно преди изпълнението на тялото на цикъла:

Тук задаваме три команди за управление - count=1 , условие за управление - докато count е по-малко от 11 и команда за изпълнение - count +1 :

WHILE и UNTIL цикли

Прост пример, който демонстрира как цикълът while работи добре:

Задаваме променливата $count на нула, след което изпълняваме цикъла while с условието „докато $count е по-малко от десет, цикъл“. В тялото на цикъла извършваме +1 постфиксно увеличение към променливата $count и извеждаме резултата на stdout.

Веднага след като стойността на променливата $count стана 10, цикълът спря.

Добър пример за "безкраен" цикъл, който демонстрира как работи while:

По същия начин, но в обратна посока, цикълът до също работи:

Тук задаваме подобно условие, но вместо „докато променливата стане по-малка от 10“, посочваме „докато променливата стане по-голяма от 10“. Резултат от изпълнението:

Ако горният пример за „безкраен цикъл“ се изпълни с помощта на until, той няма да изведе нищо, за разлика от while:

Тъй като "условието" първоначално е "вярно", тялото на цикъла няма да бъде изпълнено.

Както в цикъла for, функциите могат да се използват в while и until. Например, цикъл от наистина използван скрипт, който проверява състоянието на сървъраTomcat (PID се взема в систематаSLES, може да се различава в други системи), леко опростена версия:

Функцията за отговор беше описана в статията на BASH: Използване на функции, примери, но тази използва леко подобрена версия:

Тук беше възможно да се използват докато и докато - но не и цикълът for, тъй като for щеше да работи веднъж (получаване на PID - и край).