Sut i Ysgrifennu Bash-Loops Bash

Gorchmynion, Cystrawen, ac Enghreifftiau

Gallwch weithredu dilyniant o orchmynion trwy eu hysgrifennu i mewn i ffeil sgript ac yna ei redeg.

Ffeil testun yw ffeil sgript yn unig, fel arfer gydag estyniad ffeil .SH, sy'n cynnwys dilyniant o gyfarwyddiadau y gellid eu gweithredu hefyd o'r llinell orchymyn ( cregyn ).

Tra Enghreifftiau Loop

Isod mae enghraifft o dolen tra. Pan gaiff ei weithredu, bydd y ffeil sgript hon yn argraffu rhifau 1 i 9 ar y sgrin. Mae'r cyfnod traws-ddatganiad yn rhoi mwy o hyblygrwydd i chi ar gyfer nodi'r cyflwr terfynu na'r am-dolen .

#! / bin / bash count = 1 tra [$ count -le 9] yn adleisio "$ count" cwsg 1 ((cyfrif ++)) wedi'i wneud

Er enghraifft, gallwch chi wneud y ddolen ddiddiwedd o'r sgript flaenorol trwy hepgor y datganiad cynyddol "((count ++))":

#! / bin / bash count = 1 tra [$ count -le 9] yn adleisio "$ count" cwsg 1 wedi'i wneud

Mae'r datganiad "cwsg 1" yn paratoi'r gweithredu am 1 eiliad ar bob ailadrodd. Defnyddiwch y llwybr byr bysellfwrdd Ctrl + C i derfynu'r broses.

Gallwch hefyd greu dolen ddiddiwedd trwy roi colon fel y cyflwr:

#! / bin / bash count = 1 while: make echo "$ count" sleep 1 ((count ++)) done

Er mwyn defnyddio cyflyrau lluosog yn y trac-dolen, mae'n rhaid i chi ddefnyddio'r nodiant cromfachau sgwâr dwbl:

cyfrif = 1 wedi'i wneud = 0 tra [[$ count -le 9] && [$ done == 0]] yn adleisio "$ count" cwsg 1 ((cyfrif ++)) os [$ count == 5]; yna $ done = 1 fi wedi'i wneud

Yn y sgript hwn, dechreuwyd y newidyn "done" i 0 ac yna'i osod i 1 pan fydd y cyfrif yn cyrraedd 5. Mae'r amod dolen yn nodi y bydd y traclen yn parhau cyn belled â bod "cyfrif" yn llai na naw a "gwneud" yn gyfartal i sero. Felly mae'r dolenni'n gadael pan fydd y cyfrif yn hafal 5.

Mae'r "&&" yn golygu rhesymegol "a" a "||" yn rhesymegol "neu".

Mae nodiant amgen ar gyfer y cyfuniadau "a" a "neu" mewn amodau yn "-a" a "-o" gyda chromfachau sgwâr sengl. Y cyflwr uchod:

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

... gellid ei ailysgrifennu fel:

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

Fel rheol, mae darllen ffeil destun yn cael ei wneud gyda dolen tra. Yn yr enghraifft ganlynol, mae'r sgript bash yn darllen y llinell gynnwys yn ôl llinell ffeil o'r enw "inventory.txt:"

FILE = inventory.txt exec 6

Mae'r llinell gyntaf yn aseinio'r enw ffeil mewnbwn i'r newidyn "FILE". Mae'r ail linell yn arbed y "mewnbwn safonol" yn y disgrifydd ffeil "6" (gallai fod yn werth rhwng 3 a 9). Gwneir hyn fel y gellir adfer "mewnbwn safonol" i ffeilio disgrifydd "0" ar ddiwedd y sgript (gweler y datganiad "exec 0 Yn y 3ydd llinell, rhoddir y ffeil fewnbwn i ddisgrifydd ffeil" 0, "a ddefnyddir ar gyfer mewnbwn safonol. Mae'r datganiad "darllen" wedyn yn darllen llinell o'r ffeil ar bob ailadrodd ac yn ei aseinio i'r newidyn "line1".

Er mwyn gadael amserlen ymlaen llaw, gallwch ddefnyddio'r datganiad torri fel hyn:

cyfrif = 1 wedi ei wneud = 0 tra [$ cyfrif -le 9] yn adleisio "$ count" cwsg 1 ((cyfrif + + +)) os [$ count == 5] yna torri i ffwrdd echo Gorffen

Mae'r rhaglen sgipiau datganiad torri yn cael ei weithredu i'r diwedd tra bo dolen ac yn esgor ar unrhyw ddatganiadau sy'n dilyn hynny. Yn yr achos hwn, mae'r datganiad "Echo Finished".

Mae'r datganiad parhad, ar y llaw arall, yn rhoi sgipiau yn unig i weddill y datganiad trac o dro o'r anheddiad presennol a neidiau'n uniongyrchol i'r ailadrodd nesaf:

cyfrif = 1 wedi ei wneud = 0 tra [$ cyfrif -le 9] yn gwneud cwsg 1 ((cyfrif ++)) os [$ count == 5] yna parhewch "$ count" wedi'i wneud yn ôl yr echo Gorffen

Yn yr achos hwn, gweithredir y datganiad "parhad" pan fo'r "cyfrif" yn cyrraedd 5. Mae hyn yn golygu nad yw'r datganiad dilynol (adleisio "$ count") yn cael ei weithredu ar yr ailadrodd hwn (pan fo gwerth "cyfrif" yn 5).