Bucla „Până” Bash: tutorial și exemple

Folosind bucla „până” într-un script Bash pentru a bucla peste comenzile.

Bash (Bourne Again Shell) este un prompt de comandă shell și un limbaj de scripting în sistemele de operare GNU/Linux. Este shell-ul implicit pentru majoritatea distribuțiilor Linux.

La fel ca majoritatea limbajelor de scripting, Bash oferă sintaxe bucle pentru a repeta sarcini similare de mai multe ori. În acest articol, vom învăța cum să folosim pana cand buclă în Bash.

Introducere

The pana cand bucla în Bash este folosită pentru a executa comenzi (comenzi executate) de mai multe ori pe baza rezultatelor unei alte comenzi (comenzi de condiție). Comenzile executate vor continua să ruleze până când comanda de condiție continuă să eșueze (adică returnează o stare diferită de zero. Orice comandă din Linux returnează 0 pentru succes și un număr întreg diferit de zero pentru eșec). Acesta este exact opusul in timp ce buclă, în care comenzile executate continuă să ruleze până când comanda condiției este reușită.

Dacă există mai multe comenzi de condiție, instrucțiunea ia în considerare doar starea ultimei comenzi din listă, adică bucla va rula până când ultima comandă din listă continuă să eșueze.

Sintaxă generală

Sintaxa generală pentru pana cand bucla în Bash este:

până termină

Lista de comenzi de execuție va rula până când ultima comandă din lista de comenzi de condiție eșuează. Odată ce ultima comandă are succes, bucla se iese.

Utilizatorii pot specifica orice fișier executabil în listele de comenzi. Pot fi programe Linux standard sau programe sau scripturi personalizate de utilizator. Fiecare comandă ar trebui să fie fie pe o linie nouă, fie separată de un punct și virgulă pe aceeași linie.

Să vedem câteva exemple.

Buclă până când o variabilă are o anumită valoare: Următoarea buclă se execută până la valoarea variabilei X este 10.

x=0 până când [[ $x -eq 10 ]] face eco $x ((x++)) terminat

În fiecare iterație, verificăm dacă valoarea lui x este 10. Valoarea este verificată folosind Test comanda. [[ Expresie ]] este sintaxa pentru comanda de testare (vezi test de om).

Apoi în interiorul face... gata bloc, pur și simplu tipărim valoarea lui x și o incrementăm. Bucla se iese odată ce comanda condiției este reușită, adică când $x este egal cu 10.

Notă: Variabila index care trebuie utilizată în bucla „până” trebuie inițializată fie înainte de bucla „până”, fie în comenzile de condiție, spre deosebire de bucla for, care permite inițializarea implicită a unei variabile.

Cu mai multe comenzi de condiție: Următoarea buclă creează 5 directoare numite dir0, dir1, ... dir4.

z=0 până la echo „Bună” echo „La revedere” [[ $z -eq 5 ]] do echo „Se creează dir$z...” mkdir dir$z ((z++)) terminat

Primele comenzi ecou „Hi” și ecou „Bye” se vor executa o dată complet; succesul sau eșecul lor nu are niciun impact asupra duratei de rulare a buclei.

Apoi se va executa comanda de testare pentru verificarea valorii variabilei z. Până când această comandă continuă să eșueze, adică până când valoarea lui z este 5, comenzile de condiție și comenzile executate continuă să ruleze în ordine. Aici, pentru fiecare iterație, va rula mai întâi cele 2 comenzi eco în stare și apoi a treia comandă de condiție verifică valoarea lui z. Dacă nu este 5, intră în buclă și execută comenzile date.

Rupeți și continuați

Declarație Break pentru ieșire condiționată

Putem folosi și declarația condiționată dacă în interiorul buclei. The dacă declarația poate fi folosită cu a pauză o instrucțiune, pentru o ieșire condiționată din buclă.

x=0 până când [[ $x -eq 10 ]] face dacă [[ $x -eq 5 ]] break fi echo $x ((x++)) terminat

Bucla până la de mai sus va imprima numere de la 0 la 4. Apoi, când valoarea lui i este 5, se va ieși din buclă. Acest lucru este deosebit de util atunci când o buclă urmează să fie ieșită atunci când o comandă oferă o ieșire specifică.

Continuați declarația pentru a omite o iterație în mod condiționat

Bash are și un continua instrucțiune pentru a sări peste partea rămasă a unei iterații într-o buclă dacă o anumită condiție este îndeplinită.

x=0 până când [[ $x -eq 10 ]] face dacă [[ $x -eq 5 ]] continuă fi echo $x ((x++)) terminat

Bucla de mai sus va tipări numere de la 0 la 10, cu excepția lui 5, deoarece în timpul iterației de x=5 există o instrucțiune continue, care va sări peste restul codului în buclă la începutul iterației x=6.

Utilizarea buclelor: scripturi și linie de comandă

Sintaxele buclei pot fi folosite în shell Bash direct sau dintr-un fișier script shell executabil. Similar cu pentru și in timp ce bucle, o dată pe pana cand Sintaxa buclei este introdusă pe shell, shell-ul continuă promptul pentru a permite utilizatorului să continue comenzile care urmează să fie redate în buclă.

În caz contrar, utilizatorul poate salva acest lucru într-un fișier script și poate executa fișierul script.

The #!/bin/bash la început specifică interpretul care urmează să fie utilizat atunci când fișierul este executat. Deși Bash este cel mai frecvent utilizat shell în zilele noastre, unii utilizatori preferă shell-uri precum zsh, care ar trebui specificat în loc de bash la începutul acestui fișier.

Pentru a acorda permisiuni de execuție pentru acest fișier, rulați:

chmod +x test.sh

In cele din urma, pentru a executa fisierul, alerga:

./test.sh

Concluzie

The pana cand bucla este o altă caracteristică importantă în scriptingul Bash. Are o importanță deosebită în scripturile complexe atunci când se așteaptă ca un anumit set de programe să returneze starea de eșec și alte comenzi(e) urmează să fie executate pentru a înregistra eșecul, pentru a afișa eroarea în detaliu sau pentru a executa pur și simplu unele programe alternative.