Kiel skribi Bash WHILE-Loops

Komandoj, Sintakso kaj Ekzemploj

Vi povas ekzekuti sekvencon de ordonoj skribante ilin en skripto-dosieron kaj poste kurante ĝin.

Skripta dosiero estas simple teksta dosiero, kutime kun la .SH-dosiero-etendo, kiu enhavas sekvencon de instrukcioj, kiuj ankaŭ povus esti ekzekutitaj de la komandlinio.

Dum Rakaj Ekzemploj

Malsupre estas ekzemplo de tempo buklo. Kiam ekzekutita, ĉi tiu skripta dosiero presos la nombrojn 1 ĝis 9 sur la ekrano. La tempo-deklaro donas al vi pli flekseblecon por precizigi la finan kondiĉon ol la por-buklo .

#! / bin / bash count = 1 dum [$ count -le 9] do echo "$ count" sleep 1 ((count ++)) done

Ekzemple, vi povas fari la antaŭan skripton senfinan ciklon preterlasante la pliiĝan deklaron "((grafo ++))":

#! / bin / bash count = 1 dum [$ count -le 9] do echo "$ count" sleep 1 done

La deklaro "dormo 1" detenas la ekzekuton dum 1 dua sur ĉiu ripeto. Uzu la klavaron de Ctrl + C por fini la procezon.

Vi povas ankaŭ krei senfinan buklon metante kolonon kiel la kondiĉon:

#! / bin / bash count = 1 dum: faru eĥon "$ count" dormo 1 ((grafo ++)) farita

Por uzi multajn kondiĉojn en la tempo-buklo, vi devas uzi la duoblan kvadratan krampo-notacion:

grafo = 1 farita = 0 dum [[$ count -le 9] && [$ done == 0]] fari eĥon "$ count" dormo 1 ((grafo ++)) se [$ count == 5]; tiam $ finita = 1 finita

En ĉi tiu skripto, la variablo "farita" estas inicialigita al 0 kaj poste agordi al 1 kiam la kalkulo atingas 5. La bukla kondiĉo konstatas ke la tempo buklo daŭrigos tiel longe kiel "kalkulo" estas malpli ol naŭ kaj "farita" estas egala al nulo. Sekve la cikloj eliras kiam la kalkulo egalas 5.

La "&&" signifas logika "kaj" kaj "||" signifas logika "aŭ".

Alternativa notacio por la konjunkcioj "kaj" kaj "aŭ" en kondiĉoj estas "-a" kaj "-o" kun kvadrataj krampoj. La supra kondiĉo:

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

... povus esti reeskribita kiel:

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

Legante teksta dosiero estas kutime farita per tempo buklo. En la sekva ekzemplo, la baza skripto legas la enhavlinion per linio de dosiero nomata "inventaro.txt:"

FILE = inventaro.txt ekzek 6

La unua linio atribuas la enmetan dosiernomon al la "FILE" variablo. La dua linio savas la "norman enigon" en la dosiero-priskribilo "6" (ĝi povus esti valoro inter 3 kaj 9). Ĉi tio estas farita tiel ke "norma enigo" povas esti restarigita por prezenti priskribon "0" ĉe la fino de la skripto (vidu la deklaron "exec 0 En la tria linio la eniga dosiero estas atribuita al dosiero priskribilo" 0, "kiu estas uzata por norma enigo. La "legado" deklaro tiam legas linion de la dosiero sur ĉiu ripeto kaj atribuas ĝin al la "linio1" variablo.

Por antaŭtempa eliro de tempo-buklo, vi povas uzi la rompi-deklaron kiel ĉi tion:

grafo = 1 farita = 0 dum [$ kalkulo -le 9] faru eĥon "$ kalkulo" dormo 1 ((grafo ++)) se [$ count == 5] tiam rompu finita eĥo Finita

La rompo-deklaro eksaltas programan ekzekuton ĝis la fino dum buklo kaj ekzekutas iujn deklarojn sekvantaj ĝin. En ĉi tiu kazo, la deklaro "Eĥo Finita".

La konstanta deklaro, aliflanke, saltas nur la reston de la tempo bukla deklaro de la nuna iteracio kaj saltas rekte al la sekva ripeto:

grafo = 1 farita = 0 dum [$ count -le 9] do dormu 1 ((grafo ++)) se [$ count == 5] tiam daŭrigu foje "$ count" farita eĥo finita

En ĉi tiu kazo, la "daŭrigi" deklaro estas ekzekutita kiam la variablo "kalkulo" atingas 5. Tio signifas, ke la posta deklaro (eĥo "$ count") ne ekzekutas sur ĉi tiu ripeto (kiam la valoro de "kalkulo" estas 5).