Как да пиша Bash WHILE-Loops

Команди, синтаксис и примери

Можете да изпълнявате последователност от команди, като ги записвате в скрипт и след това ги изпълнявате.

Скриптовият файл е просто текстов файл, обикновено с разширение .SH файл, който съдържа последователност от инструкции, които могат да бъдат изпълнени и от командния ред ( shell ).

Въпреки примерите за цикли

По-долу има пример за момент. Когато бъде изпълнен, този скрипт файл ще отпечата номерата от 1 до 9 на екрана. Продължението-изявление ви дава по-голяма гъвкавост при определяне на условието за терминиране, отколкото на for-loop .

#! / bin / bash count = 1 докато [$ count -le 9] направи ехо "$ count" сън 1 ((брой ++)) направено

Например, можете да направите предишния скрипт безкраен цикъл като пропуснете израза "((брой ++))":

#! / bin / bash count = 1, докато [$ count -le 9] направи ехо "$ count" sleep 1 done

Изявлението "сън 1" спира изпълнението за 1 секунда за всяка итерация. Използвайте клавишната комбинация Ctrl + C, за да прекратите процеса.

Можете също така да създадете безкраен цикъл като поставите двоеточие като условие:

#! / bin / bash count = 1 докато: echo "$ count" сън 1 ((брой ++)) направено

За да използвате множество условия във времевата линия, трябва да използвате нотация с двойна квадратна скоба:

count = 1 done = 0, докато [[$ count -le 9] && [$ done == 0]] направи ехо "$ count" сън 1 ((брой ++)) ако [$ count == 5]; след това $ done = 1 fi done

В този скрипт променливата "done" се инициализира на 0 и след това се настройва на 1, когато броят достигне 5. Състоянието на цикъла посочва, че while loop ще продължи докато "count" е по-малко от девет и "done" е равно до нула. Следователно цикъла излиза, когато броят е равен на 5.

"&&" означава логически "и" и "||" означава логически "или".

Алтернативно означение за съкращения "и" и "или" в условия е "-а" и "-о" с единични квадратни скоби. Горното условие:

[[$ count -le 9] && [$ done == 0]]

... може да бъде пренаписан като:

[$ count -le 9] -a [$ done == 0]

Четенето на текстов файл обикновено се извършва с цикъл. В следващия пример скриптът bash прочита съдържанието по ред на файл, наречен "inventory.txt:"

FILE = inventory.txt exec 6

Първият ред определя името на входния файл в променливата "FILE". Вторият ред запазва "стандартния вход" в дескриптора на файла "6" (може да бъде всяка стойност между 3 и 9). Това се прави така, че "стандартният вход" може да бъде възстановен в дескриптор на файла "0" в края на скрипта (вижте израза "exec 0" В третия ред входният файл е присвоен на описател на файла "0" за стандартния вход, след което протоколът "read" чете линия от файла за всяка итерация и го задава на променливата "line1".

За да излезете преждевременно от време на време, можете да използвате изявлението за пауза по следния начин:

count = 1 done = 0, докато [$ count -le 9] направи ехо "$ count" sleep 1 ((count ++)) ако [$ count == 5]

Прекъснатата декларация прескача изпълнението на програмата до края, докато цикълът изпълнява всички изявления след нея. В този случай изявлението "ехо завършено".

Продължението, от друга страна, пропуска само останалата част от израза за цикъл на текущата итерация и прескача директно на следващата итерация:

count = 1 done = 0 докато [$ count -le 9] прави сън 1 ((брой ++)) ако [$ count == 5] продължи да е echo "$ count"

В този случай декларацията "continue" се изпълнява, когато променливата "count" достигне 5. Това означава, че последната операция (echo "$ count") не се изпълнява при тази итерация (когато стойността на "count" е 5).