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 pentru
buclă în Bash.
Introducere
Un script Bash tipic conține o serie de comenzi care trebuie executate una după alta. Variabilele pot fi folosite pentru a stoca șiruri de caractere, valori ale indexului întreg, rezultatele unei comenzi etc. Buclele sunt necesare atunci când utilizatorul dorește să execute o anumită comandă de mai multe ori. Este de folos în special atunci când ieșirea unei comenzi este sub forma unei liste, iar pe fiecare rezultat, din listă, urmează să fie rulată o a doua comandă.
Sintaxă generală
Sintaxa generală pentru pentru
bucla în Bash este:
pentru in do ...... gata
Aici este o variabilă Bash, care trebuie să fie un nume valid de variabilă Linux, adică numele conține o combinație de litere (az, AZ), numere (0-9) și liniuță de subliniere ( _ ) și trebuie să înceapă fie cu o literă, fie o subliniere.
The este fie o gamă personalizată de indici întregi care vor fi redate în buclă, fie o listă personalizată de numere întregi sau șiruri. Poate conține, de asemenea, o altă comandă Linux, totuși, rezultatul unei astfel de comenzi trebuie să fie separate prin spații sau caractere newline, adică analizabil de Bash într-o listă (O listă în Bash este practic o colecție de valori separate printr-un spațiu sau o nouă linie). ).
Indiferent de comenzile care urmează să fie executată, trebuie plasată în interiorul face..terminat
bloc.
Să vedem câteva exemple simple.
Buclă pe un interval de valori întregi: Următorul cod creează directoare numite dir1, dir2, dir3 până la dir10.
pentru i în {1..10} do mkdir dir$i făcut
Buclă pe o listă de valori fixe: Următorul cod tipărește fiecare șir sau întreg din lista fixă dată.
pentru eu în Hello 1 2 3 Pa! do echo $i gata
Buclă la ieșirea unei comenzi: Următorul cod trece peste ieșirea lui ls
și imprimă numele fiecărui fișier în formatul dat.
pentru i în `ls` do echo "Numele fișierului este $i" gata
Sintaxă bazată pe expresii
O sintaxă bazată pe expresii similară cu limbajul de programare C este de asemenea posibilă în Bash:
pentru ((Expresia 1; Expresia 2; Expresia 3)) do ... ... gata
Aici, Expresia 1
este inițializarea variabilelor de index. Expresia 2
este condiția în care trebuie ieșită din buclă; această condiție este verificată la fiecare iterație. Expresia 3
specifică creșterea/scăderea/modificarea valorii variabilelor de index
Următorul exemplu imprimă pur și simplu valori de la 0 la 4:
pentru ((i=0;i<5;i++)) do echo $i facut
Următorul exemplu creează o buclă infinită, deoarece nu sunt specificate expresii:
pentru (( ; ; )) face eco „Apăsați Ctrl-C pentru a opri” gata
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ă.
pentru ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] atunci break else echo $i; fi gata
Bucla 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ă. De exemplu, următoarea buclă se întrerupe dacă și când găsește un fișier gol.
pentru fișierul în `ls` do flen=`wc -c $fișier` dacă [[ "$flen" = "0 $fișier" ]] atunci echo "$fișierul este gol" break else echo $flen fi terminat
Comanda wc -c
imprimă numărul de linii din fișier . Îl tipărește în format
, de exemplu,
10 test.txt
. Ieșim din buclă când numărul de linii este 0, adică un fișier gol.
Continuați declarația pentru a omite o iterație în mod condiționat
Similar cu C și cu multe alte limbaje de programare, bash are și a 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ă.
pentru ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] apoi continua fi echo $i; 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 i=5
există o instrucțiune continue, care va sări peste restul codului în buclă la începutul iterației i=6
.
În exemplul următor, imprimăm numărul de linii dintr-un fișier și o anumită iterație va fi continua
dacă este un director și nu un fișier.
pentru fișierul în `ls` do if [[ -d $file ]] apoi continua fi wc -c "$file" gata
[[ -d $fișier ]]
verifică dacă fișierul este un director. Dacă este, atunci trecem la următorul fișier, adică la următoarea iterație. Dacă nu este un director, imprimăm numărul de linii din fișier folosind WC
comandă, așa cum s-a arătat și anterior.
Utilizarea buclelor: scripturi și linie de comandă
Sintaxa buclei poate fi utilizată în shell Bash direct sau dintr-un fișier script shell. Odata pentru
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 pentru
bucla în Bash este o caracteristică destul de simplă, dar este utilizată în aproape toate tipurile de scenarii complexe de scripting. Învățarea acesteia înseamnă mult, indiferent dacă sunteți un utilizator Linux obișnuit sau avansat, sau că începeți să învățați automatizarea pentru administrarea sistemului și sarcinile DevOps.