Як пісаць Bash While-Loops

Каманды, Сінтаксіс і прыклады

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

Файл сцэнарыя гэта проста тэкставы файл, звычайна з пашырэннем .SH файла, які змяшчае паслядоўнасць каманд , якія таксама могуць быць выкананы з каманднага радка ( абалонкі ).

У той час як у прыкладах Лупа

Ніжэй прыведзены прыклад цыклу. Пры запуску гэты файл сцэнара будзе друкаваць лічбы ад 1 да 9 на экране. Аператар цыкла дае вялікую гнуткасць для вызначэння ўмовы завяршэння , чым для цыклу .

#! / Bin / кол - Баш = 1 , а [$ падлічваць -le 9] рабіць рэха "$ кол" спаць 1 ((кол ++)) зроблена

Напрыклад, вы можаце зрабіць папярэдні сцэнар бясконцага цыклу, апусціўшы прырашчэнне пра «((злічыць ++))»:

#! / Bin / кол - Баш = 1 , а [$ падлічваць -le 9] рабіць рэха "$ кол" спаць 1 зроблена

Аператар «сну 1» прыпыняе выкананне на працягу 1 секунды на кожнай ітэрацыі. Выкарыстоўвайце Ctrl + C на клавіятуры ярлык для завяршэння працэсу.

Вы таксама можаце стварыць бясконцы цыкл, паставіўшы двукроп'е ў якасці ўмовы:

#! / Bin / кол - Баш = 1 , а: ня рэха "$ кол" спаць 1 ((палічыце ++)) зроблена

Для таго, каб выкарыстоўваць некалькі умоў у той час як завесах, вы павінны выкарыстоўваць падвойнае квадратныя дужкі абазначэнне:

кол = 1 зроблена = 0 ў той час як [[$ разлічваць -le 9] && [$ зроблена == 0]] рабіць рэха "$" падлік сну (1 (кол ++)) , калі [$ падлік == 5]; то $ зроблена = 1 ц зроблена

У гэтым сцэнары, пераменная «зроблена» ініцыялізуецца 0, а затым усталёўваецца ў 1, калі лічыльнік дасягае 5. Умова цыклу сцвярджае, што цыкл, пакуль будзе працягвацца да таго часу, пакуль «кол» менш, чым дзевяць, і «зроблена» роўна да нуля. Таму пятля выхаду, калі лічыльнік роўны 5.

«&&» азначае лагічнае «і» і «||» азначае лагічнае «або».

Альтэрнатыва для абазначэння конъюнкции «і» і «ці» ва ўмовах «-a» і «-o» з адзінкавымі квадратнымі дужкамі. Вышэй ўмова:

[[$ Падлічваць -le 9] && [$ зроблена == 0]]

... можна перапісаць у выглядзе:

[$ Падлічваць -le 9] -a [$ зроблена == 0]

Чытанне тэкставага файла, як правіла, робіцца з дапамогай цыклу. У наступным прыкладзе скрыпт Баш чытае радок змесціва па радку файла пад назвай «inventory.txt:»

FILE = inventory.txt Exec 6

Першы радок прысвойвае імя ўваходнага файла ў «FILE» пераменны. Другая радок захоўвае «стандартны ўвод» у дэскрыптар файла "6" (гэта можа быць любое значэнне паміж 3 і 9). Гэта робіцца для таго, што «стандартны ўвод» можа быць адноўлены ў файл дэскрыптара "0" ў канцы сцэнара (гл заяву «Exec 0 У 3-м радку уваходнага файла прысвойваецца ў файл з дэскрыптарам" 0 ", які выкарыстоўваецца для стандартнага ўводу. «чытанне» заяву затым чытае радкі з файла на кожнай ітэрацыі і прысвойвае яго зменнай "» лініі 1.

Для таго, каб датэрмінова выйсці ў той час як контур, вы можаце выкарыстоўваць аператар разрыву, як гэта:

кол = 1 зроблена = 0 ў той час як [$ падлічваць -le 9] рабіць рэха "$ кол" спаць 1 ((кол ++)) калі [$ падлік == 5] затым перапынак фі зрабілі рэха Закончанае

Заява перапынку скача выкананне праграмы да канца ў той час як завесы і выконвае любыя заявы пасля яго. У гэтым выпадку аператар «рэха завершанасці.»

Працягваюць заяву, з другога боку, прапускае толькі астатнюю частку аператара цыкла у той час як бягучай ітэрацыі і пераходзіць непасрэдна да наступнай ітэрацыі:

кол = 1 зроблена = 0 ў той час як [$ падлічваць -le 9] рабіць спаць 1 ((палічыце ++)) калі [$ падлік == 5] затым працягнуць фі рэха "$ рахунак" зроблена рэха Закончанае

У гэтым выпадку, «працягнуць» аператар выконваецца, калі пераменная «лічыльнік» дасягае 5. Гэта азначае, што наступнае сцвярджэнне (рэха «$ кол») не выконваецца на гэтай ітэрацыі (калі значэнне «лічыльніка» з'яўляецца 5).