BASH описание на цикли for, while, until и примери за използване
Кратко описание на разликата в типовете цикли: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 - и край).