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.