Hoe skryf jy Bash WHILE-Loops

Opdragte, sintaksis en voorbeelde

U kan 'n reeks opdragte uitvoer deur dit in 'n skriflêer te skryf en dan te hardloop.

'N Skriplêer is bloot 'n tekslêer, gewoonlik met die .SH-lêeruitbreiding, wat 'n reeks instruksies bevat wat ook uit die opdraglyn ( skulp ) uitgevoer kan word.

Terwyl Loop Voorbeelde

Hieronder is 'n voorbeeld van 'n rukkie. Wanneer dit uitgevoer word, sal hierdie skriplêer die nommers 1 tot 9 op die skerm druk. Die tydrekening gee jou meer buigsaamheid om die beëindigingstoestand te spesifiseer as die voorloop .

#! / bin / bash count = 1 terwyl [$ telling -le 9] echo "$ count" slaap 1 ((count ++)) gedoen

Byvoorbeeld, jy kan die vorige skrif 'n oneindige lus maak deur die inkremente-stelling uit te laat "((telling ++))":

#! / bin / bash count = 1 terwyl [$ telling -le 9] echo "$ count" slaap 1 gedoen

Die "sleep 1" -verklaring staak die uitvoering vir 1 sekonde op elke herhaling. Gebruik die sleutelbordkortpaaie Ctrl + C om die proses te beëindig.

Jy kan ook 'n oneindige lus skep deur 'n kolon as die voorwaarde te plaas:

#! / bin / bash count = 1 terwyl: echo "$ count" slaap 1 ((count ++)) gedoen

Om verskeie toestande in die tussentyd te gebruik, moet u die dubbele vierkantige bracket notasie gebruik:

count = 1 klaar = 0 terwyl [[$ telling -le 9] && [$ done == 0]] echo "$ count" sleep 1 ((count ++)) as [$ count == 5]; dan $ klaar = 1 voltooid

In hierdie skrip word die veranderlike "gedoen" geïnitialiseer na 0 en dan ingestel op 1 wanneer die telling 5 bereik. Die lusvoorwaarde bepaal dat die luslus sal voortduur solank as "telling" minder is as nege en "klaar" is gelyk tot nul. Daarom loop die loops af wanneer die telling gelyk is aan 5.

Die "&&" beteken logiese "en" en "||" beteken logiese "of".

'N Alternatiewe notasie vir die voegwoorde "en" en "of" in toestande is "-a" en "-o" met enkele vierkantige hakies. Bogenoemde voorwaarde:

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

... kan herskryf word as:

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

Die lees van 'n tekslêer word tipies gedoen met 'n kort tydjie. In die volgende voorbeeld lees die bash script die inhoud lyn vir reël van 'n lêer genaamd "inventory.txt:"

Lêer = inventory.txt exec 6

Die eerste reël gee die invoer lêer naam aan die "FILE" veranderlike. Die tweede reël slaan die "standaard invoer" in die lêerbeskrywer "6" (dit kan enige waarde tussen 3 en 9 wees). Dit word gedoen sodat "standaard invoer" herstel kan word na lêerbeskrywer "0" aan die einde van die skrif (sien die stelling "exec 0 In die 3de reël word die insetlêer toegeken aan lêerbeskrywer" 0, "wat gebruik word vir standaard insette. Die "lees" stelling lees dan 'n reël van die lêer op elke iterasie en wys dit aan die "line1" -veranderlike.

Om vroegtydig 'n tydlengte te verlaat, kan u die breukverklaring soos volg gebruik:

telling = 1 klaar = 0 terwyl [$ telling -le 9] echo "$ telling" slaap 1 ((telling ++)) as [$ telling == 5] dan breek fi klaar echo Voltooi

Die breekverklaring slaan programuitvoering na die einde toe terwyl dit loop en enige stellings uitvoer wat daarop volg. In hierdie geval is die stelling "echo Finished."

Die voortgesette stelling, aan die ander kant, slaan slegs die res van die lopende stelling van die huidige iterasie oor en spring direk na die volgende iterasie:

telling = 1 klaar = 0 terwyl [$ telling -le 9] slaap 1 ((telling ++)) as [$ telling == 5] dan voortgaan fi echo "$ count" klaar echo Voltooi

In hierdie geval word die "continue" stelling uitgevoer wanneer die veranderlike "telling" 5 bereik. Dit beteken dat die volgende stelling (echo "$ telling") nie op hierdie iterasie uitgevoer word nie (wanneer die waarde van "telling" 5 is).