Bucla „While” Bash: tutorial și exemple

Folosind bucla „while” în scriptul Bash pentru a repeta peste comenzi.

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 in timp ce buclă în Bash.

Introducere

The in timp ce 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 condiției va rula cu succes (adică returnează o stare 0. Orice comandă din Linux returnează 0 pentru succes și un număr întreg diferit de zero pentru eșec).

Dacă există mai multe comenzi de condiție, instrucțiunea ia în considerare doar starea ultimei comenzi din listă, adică bucla se execută până când ultima comandă din listă rulează cu succes.

Sintaxă generală

Sintaxa generală pentru in timp ce bucla în Bash este:

în timp ce faci

Lista de comenzi de execuție va continua să ruleze până când ultima comandă din lista de comenzi de condiție va rula cu succes și iese cu starea 0. În iterație, când ultima comandă de condiție eșuează, bucla se iese.

Utilizatorul poate 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 nu este egal cu 10.

x=0 în timp ce [[ $x -ne 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). Aici, deoarece folosim -ne operator (care înseamnă „nu este egal cu”), comanda de testare returnează 0, adică succes, dacă valoarea lui x nu este 10, și returnează o valoare diferită de zero, adică eșec dacă valoarea lui x este 10.

Apoi în interiorul face... gata bloc, tipărim valoarea lui x și o incrementăm. Odată ce valoarea lui x este 10, comanda de testare returnează starea diferită de zero și bucla se iese.

Notă: Variabila index care trebuie utilizată în bucla while trebuie inițializată fie înainte de bucla while, 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 while echo „Lista de fișiere:” ls -l [[ $z -ne 5 ]] do echo „Se creează dir$z...” mkdir dir$z ((z++)) terminat

Primele comenzi echo „Lista de fișiere:” și ls -l se va 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 valoarea lui z nu este 5, comanda de testare returnează starea de succes și, prin urmare, bucla continuă să ruleze. Comenzile de condiție și comenzile executate continuă să ruleze în ordine. Aici, pentru fiecare iterație, va rula mai întâi comanda echo și comanda ls î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ă instrucțiune, pentru o ieșire condiționată din buclă.

x=0 în timp ce [[ $x -ne 10 ]] face dacă [[ $x -eq 5 ]] break fi echo $x ((x++)) terminat

Bucla while 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 declarație, pentru a sări peste partea rămasă a unei iterații într-o buclă dacă o anumită condiție este îndeplinită.

x=0 în timp ce [[ $x -ne 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 in timp ce Sintaxa buclei este introdusă pe shell, shell-ul continuă promptul pentru a permite utilizatorului să continue comenzile care urmează să fie redate în buclă.

Sau 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 in timp ce buclă, asemănătoare cu pentru și pana cand buclele sunt o caracteristică importantă în scriptingul Bash. Bucla While are o utilizare similară cu bucla până, cu excepția faptului că este folosită pentru a rula comenzi/programe alternative atunci când un anumit program reușește. Acest lucru își găsește adesea utilitatea în scripturile avansate de rețea, scripturile de întreținere a sistemului etc.