Kā uzrakstīt Bash WHILE-Loops

Komandas, sintakse un piemēri

Jūs varat izpildīt komandu secību, ierakstot tos skripta failā un pēc tam to izpildot.

Skripta fails ir vienkārši teksta fails, parasti ar .SH faila paplašinājumu, kas satur instrukciju secību, kuru var izpildīt arī no komandrindas ( shell ).

Kaut cilpa piemēri

Zemāk ir piemērs, kamēr nav cilpas. Kad izpildīts, šis skripta fails izdrukās numurus no 1 līdz 9 ekrānā. Laika pārskats sniedz jums lielāku elastību, lai norādītu izbeigšanas nosacījumu nekā for-loop .

#! / bin / bash skaits = 1, kamēr [$ count-le 9] do echo "$ count" gulēt 1 ((count ++)) izdarīts

Piemēram, jūs varat padarīt iepriekšējo skriptu bezgalīgu cilpu, izlaižot pieauguma paziņojumu "((count ++))":

#! / bin / bash skaits = 1, kamēr [$ count-le 9] do echo "$ count" miega 1 done

"Miega 1" paziņojums aptur izpildi par 1 sekundi katrā atkārtojumā. Lai pārtrauktu procesu, izmantojiet taustiņu kombināciju Ctrl + C.

Jūs varat arī izveidot bezgalīgu cilpu, ievietojot kolu kā nosacījumu:

#! / bin / bash count = 1 kamēr: do echo "$ count" gulēt 1 ((count ++)) izdarīts

Lai izmantotu vairākus nosacījumus cikla laikā, jums ir jāizmanto dubultā kvadrātiekavas uzraksts:

Count = 1 pabeigts = 0, kamēr [[$ count-le 9] && [$ done == 0]] do echo "$ count" gulēt 1 ((count ++)), ja [$ count == 5]; tad $ done = 1 fi izdarīts

Šajā skriptā mainīgais "done" tiek inicializēts ar 0 un tad tiek iestatīts uz 1, kad skaits sasniedz 5. Kontūras stāvoklis nosaka, ka cilnes cilpas turpinās tik ilgi, kamēr "count" ir mazāks par deviņiem un "done" ir vienāds līdz nullei. Tāpēc cilpas iziet, kad skaits ir vienāds ar 5.

"&&" ir loģisks "un" un "||" ir loģisks "vai".

Alternatīva nozīme konjunkcijām "un" un "vai" apstākļos ir "-a" un "-o" ar vienādām kvadrātiekavās. Iepriekšminētais nosacījums:

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

... var pārrakstīt kā:

[$ skaits-loka 9] -a [$ pabeigts == 0]

Teksta faila lasīšana parasti tiek veikta ar cikla laiku. Turpmākajā piemērā bash skripts skan satura rindu pēc faila rindas ar nosaukumu "inventory.txt:"

FILE = inventory.txt exec 6

Pirmā rinda piešķir ievades faila nosaukumu mainīgajam failam "FILE". Otrā rinda saglabā "standarta ievadi" faila deskriptorā "6" (tā var būt jebkura vērtība no 3 līdz 9). Tas tiek darīts tā, lai "standarta ievadi" varētu atjaunot faila deskriptorā "0" skripta beigās (sk. Paziņojumu "exec 0" 3. rindā ievades fails tiek piešķirts faila deskriptoram "0", kuru lieto par standarta ievadei. "Lasīt" paziņojums pēc tam lasa līniju no faila par katru iterāciju un piešķir to "line1" mainīgajam.

Lai priekšlaikus izietu no cikla, varat izmantot pārtraukuma paziņojumu šādi:

skaits = 1 pabeigts = 0, kamēr [$ count-le 9] do echo "$ count" gulēt 1 ((count ++)), ja [$ count == 5], tad pārtraukta echo Finished

Pārtraukuma paziņojums pārtrauc programmas izpildi līdz cilpu beigās un izpilda visus paziņojumus pēc tā. Šajā gadījumā paziņojums "echo Finished".

No otras puses, turpinājuma paziņojums izlaiž tikai pārējo pašreizējās iterācijas cikla pārskatu un pāriet tieši uz nākamo iterāciju:

skaits = 1 pabeigts = 0, kamēr [$ count-le 9] gulēt 1 ((count ++)), ja [$ count == 5], tad turpiniet atskaiti "$ count" done echo Finished

Šajā gadījumā paziņojums "continue" tiek izpildīts, kad mainīgais "count" sasniedz 5. Tas nozīmē, ka nākamajā izteiksmē (echo "$ count") šajā atkārtojumā netiek izpildīts (ja "count" vērtība ir 5).