Android

Bash în timp ce bucla

grep: All you need to know | #6 Practical Bash

grep: All you need to know | #6 Practical Bash

Cuprins:

Anonim

Buclele sunt unul dintre conceptele fundamentale ale limbajelor de programare. Buclele sunt utile atunci când doriți să rulați o serie de comenzi de mai multe ori până când o anumită condiție este îndeplinită.

În limbaje de script cum ar fi Bash, buclele sunt utile pentru automatizarea sarcinilor repetitive. Există 3 construcții de buclă de bază în scripturile Bash, pentru buclă, loop, și până la buclă.

Acest tutorial explică elementele de bază ale buclelor în timp ce Bash, precum și declarațiile de pauză și continuare pentru a modifica fluxul unei bucle.

Bash în timp ce Buclă

Bucla while este utilizată pentru a efectua un set dat de comenzi de un număr necunoscut de ori, atâta timp cât condiția dată este evaluată la true.

Bucla Bash while are următoarea formă:

while do done

Starea este evaluată înainte de a executa comenzile. Dacă condiția se evaluează la adevărat, comenzile sunt executate. În caz contrar, dacă condiția se evaluează falsă, bucla va fi încheiată și controlul programului va fi trecut la comanda care urmează.

În exemplul de mai jos, pe fiecare iterație, bucla tipărește valoarea curentă a variabilei i și crește variabila cu una.

i=0 while do echo Number: $i ((i++)) done

Bucla Tue iterează atât timp cât i este mai mică sau egală cu două. Va produce următoarea producție:

Number: 0 Number: 1 Number: 2

Infinit în timp ce Buclă

O buclă infinită este o buclă care se repetă la nesfârșit și nu se termină niciodată. Dacă starea se evaluează întotdeauna ca adevărat, obțineți o buclă infinită.

În următorul exemplu folosim comanda încorporată : care întoarce întotdeauna adevărat pentru a crea o buclă infinită. Puteți utiliza, de asemenea, true comandă încorporată sau orice altă declarație care întoarce întotdeauna adevărat.

while: do echo "Press to exit." sleep 1 done while: do echo "Press to exit." sleep 1 done

În timp ce bucla de mai sus va rula la nesfârșit. Puteți încheia bucla apăsând CTRL+C

Iată un echivalent cu o singură linie:

while:; do echo 'Press to exit.'; sleep 1; done while:; do echo 'Press to exit.'; sleep 1; done

Citiți un fișier Line by Line

Una dintre cele mai frecvente utilizări ale buclei while este să citiți un fișier, un flux de date sau o linie variabilă linie cu linie.

În următorul exemplu, bucla while va citi /etc/passwd linie rând cu rând și va imprima fiecare linie.

file=/etc/passwd while read -r line; do echo $line done < "$file"

În loc să controlăm bucla while cu o condiție, folosim redirecționarea de intrare ( < "$file" ) pentru a trece un fișier la read care este comanda care controlează bucla. Bucla de timp va rula până când se citește ultima linie.

Când citiți fișier linie cu linie, utilizați întotdeauna read cu opțiunea -r pentru a împiedica reactivarea să funcționeze ca un caracter de evadare.

În mod implicit, comisia de read nuanțează caracterele din spațiul principal (spate și file). Utilizați opțiunea IFS= înainte de comanda read pentru a preveni acest comportament

file=/etc/passwd while IFS= read -r line; do echo $line done < "$file"

Declarații de pauză și continuare

Instrucțiunile de pauză și continuare pot fi utilizate pentru a controla execuția buclei în timp.

Declarație de pauză

Instrucțiunea de întrerupere încheie bucla curentă și trece controlul programului la comanda care urmează bucla terminată. De obicei este folosit pentru a încheia bucla atunci când este îndeplinită o anumită condiție.

În exemplul următor, execuția buclei va fi întreruptă odată ce elementul iterat curent este egal cu 2 .

i=0 while do echo "Number: $i" ((i++)) if]; then break fi done echo 'All Done!'

Number: 0 Number: 1 All Done!

Continuați declarația

Instrucțiunea continuare iese din iterația curentă a unei bucle și trece controlul programului la următoarea iterație a buclei.

În cele ce urmează, odată ce elementul iterat curent este egal cu 2 , instrucțiunea continuare va determina executarea să revină la începutul buclei și să continue cu iterația următoare.

i=0 while do ((i++)) if]; then continue fi echo "Number: $i" done echo 'All Done!'

Number: 1 Number: 3 Number: 4 Number: 5 All Done!

Concluzie

Până acum, ar trebui să înțelegeți bine modul de utilizare a bazhului în buclă.

terminal de buclă bash