Cum de a scrie Bash WHILE-Loops

Comenzi, sintaxă și exemple

Puteți executa o serie de comenzi scriind-le într-un fișier de script și executându-l.

Un fișier script este pur și simplu un fișier text, de obicei cu extensia de fișier .SH, care conține o secvență de instrucțiuni care ar putea fi de asemenea executate din linia de comandă ( shell ).

În timp ce exemplele de buclă

Mai jos este un exemplu de buclă. Când este executat, acest fișier script va tipări numerele de la 1 la 9 de pe ecran. Declanșarea în timp vă oferă mai multă flexibilitate pentru specificarea condiției de terminare decât for-loop .

#! / bin / count count = 1 în timp ce [$ count -le 9] fac echo "$ count" somn 1 ((count ++)) done

De exemplu, puteți face scriptul anterior o buclă infinită prin omiterea instrucțiunii increment "((count ++))":

#! / bin / count count = 1 în timp ce [$ count -le 9] fac echo "$ count" somn 1 făcut

Declarația "somn 1" întrerupe executarea timp de 1 secundă la fiecare iterație. Utilizați comanda rapidă de la tastatură Ctrl + C pentru a termina procesul.

Puteți crea, de asemenea, o buclă infinită prin plasarea unui colon ca condiție:

#! / bin / count count = 1 în timp ce: echo "count" somn 1 ((count ++)) făcut

Pentru a folosi mai multe condiții în buclă, trebuie să utilizați notația cu braț dublu:

numără = 1 făcut = 0 în timp ce [[$ count -le 9] && [$ done == 0]] face echo "count" sleep 1 ((count ++)) dacă [$ count == 5]; apoi $ done = 1 fi făcut

În acest script, variabila "done" este inițializată la 0 și apoi setată la 1 când numărătoarea ajunge la 5. Condiția de buclă afirmă că bucla în timp ce va continua atâta timp cât "count" este mai mică de nouă și "done" este egală la zero. Prin urmare, buclele ies la ieșire când numărul este egal cu 5.

"&&" înseamnă logic "și" și "||" înseamnă logică "sau".

O notație alternativă pentru conjuncții "și" și "sau" în condiții este "-a" și "-o" cu paranteze unice pătrate. Condiția de mai sus:

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

... ar putea fi rescris ca:

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

Citirea unui fișier text se face, de obicei, cu o bucla în timp. În următorul exemplu, scriptul bash citește linia de conținut după rândul unui fișier numit "inventory.txt:"

FILE = inventory.txt exec 6

Prima linie atribuie numele fișierului de intrare variabilei "FILE". A doua linie salvează "intrarea standard" în descriptorul de fișiere "6" (ar putea fi orice valoare între 3 și 9). Acest lucru se face astfel încât "intrarea standard" să poată fi restabilită la descriptorul de fișiere "0" la sfârșitul scriptului (vezi instrucțiunea "exec 0" În linia a treia fișierul de intrare este atribuit descriptorului de fișiere "0" pentru instrucțiunea standard, instrucțiunea "citire" citește apoi o linie din fișier pentru fiecare iterație și o atribuie variabilei "line1".

Pentru a ieși prematur dintr-o buclă, puteți folosi instrucțiunea de pauză astfel:

count = 1 done = 0 în timp ce [$ count -le 9] face echo "count" sleep 1 ((count ++)) dacă [$ count == 5]

Instrucțiunea de pauză preia execuția programului până la sfârșit în timp ce se execută buclă și execută orice declarații care o urmează. În acest caz, afirmația "ecou Finished".

Instrucțiunea continuă, pe de altă parte, ignoră doar restul instrucțiunii buclă while a iterației curente și sare direct la următoarea iterație:

count = 1 done = 0 în timp ce [$ count -le 9] face somn 1 ((count ++)) dacă [$ count == 5] continua fi echo "$ count"

În acest caz, declarația "continuă" este executată atunci când variabila "count" ajunge la 5. Aceasta înseamnă că declarația ulterioară (echo "$ count") nu este executată pe această iterație (când valoarea "count" este 5).