Android

Bash pentru buclă

Shell Scripting - For Loops

Shell Scripting - For Loops

Cuprins:

Anonim

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

În limbaje de script cum ar fi Bash, buclele sunt utile pentru automatizarea sarcinilor repetitive.

Există trei construcții de buclă de bază în scriptul Bash, pentru buclă, loop, și până la buclă.

În acest tutorial, vom acoperi elementele de bază pentru bucle în Bash. Vă vom arăta, de asemenea, cum să utilizați instrucțiunile de pauză și continuare pentru a modifica fluxul unei bucle.

Bash standard pentru buclă

Bucla for iterează o listă de elemente și execută setul de comenzi dat.

Bash pentru buclă are următoarea formă:

for item in do done

Lista poate fi o serie de șiruri separate prin spații, o gamă de numere, ieșirea unei comenzi, un tablou și așa mai departe.

Buclați-vă peste șiruri

În exemplul de mai jos bucla va itera peste fiecare element din lista șirurilor, iar element variabil va fi setat la elementul curent.

for element in Hydrogen Helium Lithium Beryllium do echo "Element: $element" done

Bucla va produce următoarea ieșire:

Element: Hydrogen Element: Helium Element: Lithium Element: Beryllium

Buclați pe un interval de numere

Puteți utiliza expresia secvenței pentru a specifica o gamă de numere sau caractere, prin definirea unui început și a punctului final al intervalului. Expresia de secvență are următoarea formă:

{START..END}

În exemplul de mai jos bucla va itera prin toate numerele de la 0 la 3.

for i in {0..3} do echo "Number: $i" done

Number: 0 Number: 1 Number: 2 Number: 3

Pornind de la Bash 4, este posibilă, de asemenea, să specificați o creștere atunci când utilizați intervale. Expresia ia următoarea formă:

{START..END..INCREMENT}

for i in {0..20..5} do echo "Number: $i" done

Number: 0 Number: 5 Number: 10 Number: 15 Number: 20

Buclați-vă peste elemente de matrice

Puteți utiliza, de asemenea, bucla for pentru a itera peste o serie de elemente:

În exemplul de mai jos, definim o carte BOOKS și o repetăm ​​pe fiecare element al tabloului.

BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby') for book in "${BOOKS}"; do echo "Book: $book" done

Book: In Search of Lost Time Book: Don Quixote Book: Ulysses Book: The Great Gatsby

Bash-ul în stil C pentru buclă

Sintaxa stilului C pentru buclă are următoarea formă:

for ((INITIALIZATION; TEST; STEP)) do done

Partea INITIALIZATION se execută o singură dată la pornirea buclei. Apoi, se evaluează partea TEST . Dacă este fals, bucla for este încheiată. Dacă TEST este adevărat, comenzile din corpul de buclă sunt executate și partea STEP este actualizată.

În codul următor, bucla stea prin inițializarea i = 0 , apoi înainte de fiecare iterație verifică dacă i ≤ 10 . Dacă este adevărat, acesta imprimă valoarea curentă a i și i cu 1 ( i++ ) altfel bucla se termină.

for ((i = 0; i <= 1000; i++)); do echo "Counter: $i" done

Bucla va itera de 1001 ori și va produce următoarea ieșire:

Counter: 0 Counter: 1 Counter: 2… Counter: 998 Counter: 999 Counter: 1000

Declarații de pauză și continuare

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

Declarație de pauză

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

În exemplul următor, folosim instrucțiunea if pentru a încheia execuția buclei odată ce elementul iteratat curent este egal cu „Litiu”.

for element in Hydrogen Helium Lithium Beryllium; do if]; then break fi echo "Element: $element" done echo 'All Done!'

Element: Hydrogen Element: Helium 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 exemplul următor, vom itera printr-o serie de numere și atunci când elementul iteratat curent este egal cu „2”, instrucțiunea continuare va determina execuția să revină la începutul buclei și să continue cu iterația următoare.

for i in {1..5}; do if]; then continue fi echo "Number: $i" done

Number: 1 Number: 3 Number: 4 Number: 5

Bash For Loop Exemple

Redenumirea fișierelor cu spații din numele fișierului

Următorul exemplu arată cum să utilizați Bash pentru buclă pentru a redenumi toate fișierele din directorul curent cu un spațiu în numele sale, înlocuind spațiul pentru subliniere.

for file in *\ *; do mv "$file" "${file// /_}" done

Haideți să descompunem codul rând cu linie:

  • Prima linie creează o buclă pentru și se iterează printr-o listă cu toate fișierele cu un spațiu pe numele său. Expresia *\ * creează lista. A doua linie se aplică fiecărui element din listă și mută fișierul într-unul nou, înlocuind spațiul cu o subliniere ( _ ). Partea ${file// /_} utilizează expansiunea parametrilor shell pentru a înlocui un model dintr-un parametru cu un șir. done indică sfârșitul segmentului de buclă.

Modificarea extensiei de fișier

Următorul exemplu arată cum să utilizați Bash pentru buclă pentru a redenumi toate fișierele care se termină cu.jpeg în directorul curent, înlocuind extensia de fișier de la.jpeg la.jpg.

for file in *.jpeg; do mv -- "$file" "${file%.jpeg}.jpg" done

Să analizăm codul linie după linie:

  • Prima linie creează o buclă pentru și se iterează printr-o listă cu toate fișierele care se termină cu '.jpeg'. A doua linie se aplică fiecărui element din listă și mută fișierul într-unul nou înlocuind '.jpeg' cu '.jpg'. ${file%.jpeg} pentru a elimina partea „.jpeg” din numele fișierului folosind expansiunea parametrului shell done indică sfârșitul segmentului de buclă.

Concluzie

Până acum, ar trebui să înțelegeți cum să utilizați bash-ul pentru a bucla pentru a repeta listele.

terminal de buclă bash