Bash Scripting – While Loop
A buclă while este o instrucțiune care iterează peste un bloc de cod până când condiția specificată este evaluată la fals. Putem folosi această declarație sau buclă în programul nostru atunci când nu știm de câte ori condiția va fi evaluată la adevărat înainte de a evalua fals.
Cuprins
- Sintaxa unei bucle while în BASH Scripting
- Exemplu de buclă folosind instrucțiunea while în Linux
- Citirea unui fișier cu o buclă while
- Buclă while infinită
- Bucla while pentru a repeta de un număr fix de ori
- Citiți argumentul liniei de comandă cu opțiunile getopts
- Bucla while în stil C
- buclă while pentru a efectua operații pe un fișier
- Scrierea într-un fișier folosind o buclă while
- Întrerupeți și continuați Utilizarea while Loop
- Întrebări frecvente
Sintaxa unei bucle while în BASH Scripting
while [ condition ]; do # statements # commands done
Dacă condiția este adevărată, atunci comenzile din blocul while sunt executate și sunt repetate din nou după verificarea condiției. De asemenea, dacă condiția este falsă, instrucțiunile din blocul while sunt sărite și instrucțiunile de după blocul while sunt executate.
Exemplu de buclă folosind instrucțiunea while în Linux
Mai întâi, creăm un fișier text folosind un editor de text în Linux, în acest caz folosim Editorul de text `vim`.
vim while.sh
#!/usr/bin/bash
a=7
în timp ce [ $a -gt 4 ];
do
ecou $a
((A-))
Terminat
ecou Ieșit din buclă
Explicaţie:
-
#!/usr/bin/bash>: Această linie se numește shebang și indică calea către interpret care ar trebui folosită pentru a executa scriptul. În acest caz, specifică faptul că trebuie utilizat shell-ul Bash. -
a=7>: Inițializează o variabilă numităa>cu valoarea 7. -
while [ $a -gt 4 ];>: Pornește o buclă while care continuă atâta timp cât valoarea luia>este mai mare decat 4. -
do>: marchează începutul blocului de cod care urmează să fie executat în bucla while. -
echo $a>: Imprimă valoarea curentă a variabileia>la consolă. -
((a--))>: Scade valoarea luia>de 1. Acesta este un mod scurt de a scriea=$((a - 1))>. -
done>: marchează sfârșitul blocului de cod pentru bucla while. -
echo 'Out of the loop'>: Imprimă afară din buclă pe consolă după ce bucla while s-a terminat.
While Loop în Linux
În rezumat, acest script inițializează o variabilă ` a`> cu valoarea 7, apoi intră într-o buclă while care continuă atâta timp cât ` a`> este mai mare decât 4. În cadrul buclei, se tipărește valoarea curentă a lui ` a`> și îl decrește cu 1 la fiecare iterație. Odată ` a`> devine 4 sau mai puțin, bucla se iese și scriptul se imprimă Out of the loop pe consolă.
Citirea unui fișier cu o buclă while
Putem citi un fișier cu o buclă while în BASH. Analizând anumiți parametri la condiția buclei while, putem itera peste fișier linie cu linie sau după alte grupuri, cum ar fi caractere sau cuvinte.
Mai întâi, creăm un fișier text folosind un editor de text în Linux, în acest caz folosim Editorul de text `vim`.
vim while.sh
#!/usr/bin/bash
fișier=temp.txt
while read -r line;
do
echo $line
terminat <$fișier
Explicaţie:
-
#!/usr/bin/bash>: Această linie shebang specifică faptul că shell-ul Bash trebuie utilizat pentru a interpreta scriptul. -
file=temp.txt>: Asignează șirul temp.txt variabileifile>, reprezentând numele fișierului de citit. -
while read -r line;>: Inițiază o buclă while care citește fiecare linie din fișierul specificat. -
do>: marchează începutul blocului de cod care urmează să fie executat în bucla while. -
echo $line>: Tipărește conținutul variabileiline>, care reprezintă linia curentă citită din fișier, către consolă. -
done>: marchează sfârșitul blocului de cod pentru bucla while. -
<'$file'>: Redirecționează intrarea buclei while pentru a veni din fișierul specificat, în acest caz, temp.txt.
În rezumat, acest script citește fiecare linie din fișierul temp.txt și o tipărește pe consolă până când nu mai rămân linii în fișier. The -r> opțiunea cu read> comanda este utilizată pentru a se asigura că barele oblice inverse din intrare sunt tratate ca caractere literale.
citiți fișierul folosind declarația while în Linux
Folosim comanda citire pentru a prelua de fapt liniile sau caracterele din fișier. Comanda de citire este transmisă cu argumentul -r care ignoră evadarea caracterelor dacă apare și, prin urmare, este analizată ca fiind. Citim o linie dintr-un fișier menționat după declarația făcută. Comanda de citire citește o linie din fișierul menționat și buclele while se termină când este citită ultima linie din fișier (nu mai rămâne nicio linie de citit).
Acesta este modul în care putem citi conținutul fișierului folosind o buclă while în BASH.
Buclă while infinită
Pentru a crea o buclă infinită folosind o instrucțiune while loop. Nu trebuie să punem nicio condiție în bucla while și, prin urmare, bucla se repetă la infinit. Mai jos este exemplul unei bucle while infinite:
Mai întâi, creăm un fișier text folosind un editor de text în Linux, în acest caz folosim Editorul de text `vim`.
vim while.sh
#!/usr/bin/bash
in timp ce :
do
echo O buclă infinită
# Putem apăsa Ctrl + C pentru a ieși din script
Terminat
Explicaţie:
-
#!/usr/bin/bash>: Linia shebang specifică faptul că shell-ul Bash trebuie utilizat pentru a interpreta scriptul. -
while :>: Inițiază o buclă infinită. The:>(colon) este o comandă încorporată în shell care returnează întotdeauna adevărat, creând efectiv o buclă infinită. -
do>: marchează începutul blocului de cod care urmează să fie executat în bucla infinită. -
echo 'An Infinite loop'>: Tipărește șirul An Infinite loop pe consolă în fiecare iterație a buclei. -
# We can press Ctrl + C to exit the script>: Acesta este un comentariu care indică faptul că puteți întrerupe scriptul apăsând Ctrl + C în terminal. Ctrl + C este o modalitate obișnuită de a întrerupe și de a termina rularea scripturilor în terminal. -
done>: marchează sfârșitul blocului de cod pentru bucla infinită.
În rezumat, acest script creează o buclă infinită care redă continuu mesajul O buclă infinită către consolă. Bucla poate fi întreruptă și scriptul poate fi părăsit apăsând Ctrl + C în terminal.
Buclă infinită folosind Declarația While în Linux
Astfel, bucla while din script va repeta timp infinit. Putem întrerupe manual bucla sau scriptul prin CTRL + C.
Bucla While pentru a repeta de un număr fix de ori
Putem folosi o buclă while pentru a itera de un număr fix de ori, putem seta condiția să fie -le sau mai mică decât egală cu un număr, iar bucla va itera până când iteratorul este mai mic sau egal cu numărul furnizat în conditia. De asemenea, trebuie să creștem manual iteratorul, astfel încât să menținem iteratorul buclei, altfel bucla va continua pentru totdeauna.
Mai întâi, creăm un fișier text folosind un editor de text în Linux, în acest caz folosim Editorul de text `vim`.
vim while.sh
#!/usr/bin/bash
i=1
# numărul 4 poate fi limita pentru
# repetați bucla
în timp ce [ $i -le 4 ];
do
eco $i
((i++))
Terminat
Explicaţie:
-
#!/usr/bin/bash>: linia shebang specifică faptul că shell-ul Bash trebuie utilizat pentru a interpreta scriptul. -
i=1>: Inițializează o variabilă numităi>cu valoarea 1. -
while [ $i -le 4 ];>: Inițiază o buclă while care continuă atâta timp cât valoarea luii>este mai mic sau egal cu 4. -
do>: marchează începutul blocului de cod care urmează să fie executat în bucla while. -
echo $i>: Imprimă valoarea curentă a variabileii>la consolă. -
((i++))>: Crește valoarea luii>de 1. Acesta este un mod scurt de a scriei=$((i + 1))>. -
done>: marchează sfârșitul blocului de cod pentru bucla while.
bucla while în Linux
În exemplul de mai sus, putem vedea că bucla se repetă de un număr definit de ori. Deoarece am inițializat contorul la 1 și condiția este să repetam bucla până când iteratorul este mai mic sau egal cu numărul în acest caz 4. Astfel, putem schimba numărul din condiție conform cerințelor noastre.
Citiți argumentul liniei de comandă cu opțiunile getopts
Putem folosi opțiunile get ops pentru a citi intrarea din linia de comandă și, dacă există mai multe argumente, le putem verifica și analiza unul câte unul folosind o buclă while. getopts este un instrument pentru a obține intrarea utilizatorului din linia de comandă. Putem avea mai multe opțiuni de analizat din linia de comandă și, folosind getopts și buclele while, putem crea un program de introducere a utilizatorului cu aspect profesional.
Mai întâi, creăm un fișier text folosind un editor de text în Linux, în acest caz folosim Editorul de text `vim`.
vim while.sh
#!/bin/bash
în timp ce getopts n:a: OPT
do
caz ${OPT} în
n) nume=${OPTARG} ;;
a) vârsta=${OPTARG} ;;
*) echo Opțiune nevalidă
iesirea 1;;
esac
Terminat
printf Numele meu este $name și am $age ani
Explicaţie:
-
#!/bin/bash>: linia shebang specifică faptul că shell-ul Bash trebuie utilizat pentru a interpreta scriptul. -
while getopts n:a: OPT>: Inițiază o buclă care utilizeazăgetopts>pentru a analiza opțiunile liniei de comandă. Opțiunile specificate suntn>șia>, ambele fiind de așteptat să fie urmate de un argument. -
do>: marchează începutul blocului de cod care urmează să fie executat în cadrul buclei. -
case '${OPT}' in>: Pornește o instrucțiune case care evaluează valoarea opțiunii întâlnite degetopts>. -
n) name=${OPTARG};;>: Dacă opțiunea este-n>, atribuie variabilei valoarea argumentului corespunzătorname>. -
a) age=${OPTARG};;>: Dacă opțiunea este-a>, atribuie variabilei valoarea argumentului corespunzătorage>. -
*) echo 'Invalid option'>: Dacă se întâlnește o opțiune nevalidă, tipărește un mesaj de eroare pe consolă. -
exit 1;;>: Iese din script cu un cod de stare diferit de zero, indicând o eroare. -
esac>: Încheie declarația cazului. -
done>: marchează sfârșitul blocului de cod pentru buclă. -
printf 'My name is $name and am $age years old '>: Imprimă un mesaj formatat pe consolă folosind valorile lui `name`>și `age`>obţinute din opţiunile liniei de comandă.
While buclă în Linux
În acest caz, avem două opțiuni și anume, numele și vârsta, puteți avea mai multe opțiuni. Trebuie să specificăm ce opțiune vom folosi instrucțiunile switch case și din linia de comandă folosind opțiunea -shorthand. În acest caz, am folosit -n pentru nume și -a pentru varsta . Avem, de asemenea, o verificare implicită sau nevalidă a cazurilor, pentru a rezista că nu analizăm argumente greșite. Putem atribui valoarea opțiunii folosind OPTARG variabilă care analizează valoarea oferită opțiunii.
Bucla while de aici este folosită pentru a itera până când nu există opțiuni transmise din linia de comandă. Verificăm opțiunea -n și -a și repetăm până când tasta de întoarcere a căruciorului sau enter este apăsată și nu mai există opțiuni de analizat.
Bucla while în stil C
Putem folosi bucla while în stil C în BASH, variabilele trebuie evaluate cu stilul BASH, dar sintaxa generală se simte ca C. Putem folosi operatorii ca , <= și așa mai departe în condiția buclei while și, prin urmare, este numită ca bucla while în stil C.
Mai întâi, creăm un fișier text folosind un editor de text în Linux, în acest caz folosim Editorul de text `vim`.
vim c-style-while.sh
#!/bin/bash
i=0
în timp ce ((i <12))
do
eco $i
((i+=2))
Terminat
c-stil-în timp ce
În acest exemplu, putem vedea că bucla while are o condiție cu operatori non-bash cum ar fi -le, -ge, etc, în schimb folosim operatorii în stil C în condiție. Restul buclei este bucla de bază ca în BASH, variabila sau iteratorul i este incrementat cu doi după cum putem vedea în ultima instrucțiune a corpului buclei. Astfel, bucla se repetă de peste 5 ori.
buclă while pentru a efectua operații pe un fișier
Putem efectua operații asupra unui fișier, cum ar fi citirea doar a unei anumite părți a unui fișier. Dacă avem coloane care sunt formatate într-un anumit mod, putem folosi variabile pentru a le atribui și pentru a le imprima un rând de date.
Iată exemplul de nume de fișier wh.txt
vim wh.txt
creăm un fișier text folosind un editor de text în Linux, în acest caz folosim `vim` Text Editor.
vim file-while.sh
Tipul de limbă a fost lansat
Python general 1991
Javascript web 1995
Java mobil 1995
Rugina încorporată 2010
Du-te backend 2007
creăm un fișier text folosind un editor de text în Linux, în acest caz folosim `vim` Text Editor.
vim file-while.sh
#!/bin/bash
în timp ce se citește a b c
do
ecou $b – $a
Terminat
While buclă în Linux
În acest exemplu, avem trei rânduri, citim conținutul atribuindu-le variabilelor a,b și c, poate fi orice vă place, dar amintiți-vă să le folosiți în corpul buclei. Putem selecta o anumită coloană, cum ar fi b și a și putem tipări sau efectua orice operație asupra lor. Acest lucru nu se va reflecta în fișier, deoarece acestea sunt doar variabilele de script local.
Scrierea într-un fișier folosind o buclă while
Putem scrie într-un fișier prin introducerea utilizatorului într-o buclă while. Putem folosi bucla while pentru a itera până când ieșim manual din buclă folosind CTRL + D prin salvarea modificărilor la fișier sau prin CTRL + C pentru a evita scrierea în fișier. Folosim comanda de citire pentru a introduce textul din linia de comandă și a-l analiza în fișier.
Mai întâi, creăm un fișier text folosind un editor de text în Linux, în acest caz folosim Editorul de text `vim`.
vim write-wh.sh
#! /bin/bash
fișier=wh.txt
echo Introduceți conținutul în fișierul $fișier
în timp ce linia citită
do
echo $line>> $fișier
Terminat
bucla while în Linux
Deci, din exemplul de mai sus, am putut introduce text într-un fișier folosind o buclă while și o comandă de citire. Pentru a ieși din buclă și a salva modificările la fișier, folosim tastele CTRL + D, iar pentru a ieși din buclă fără a salva nimic în fișier putem folosi tastele CTRL + C. Astfel, introducem textul din linia de comandă în fișierul text folosind comanda citire și o buclă while.
Întrerupeți și continuați Utilizarea while Loop
Break and continue sunt esențiale într-un program care se ocupă de instrucțiuni de buclă, deoarece controlează fluxul instrucțiunilor de buclă fără condiții explicite.
Break declarație în While Loop
Folosim instrucțiuni break pentru a ieși din buclă fără a aștepta ca condiția buclei while să fie evaluată la fals. Această instrucțiune poate fi utilizată într-un bloc de buclă. Acesta poate fi folosit pentru a ieși dintr-o buclă infinită cu o condiție programatică în interiorul buclei și, astfel, pentru a menține controlul buclei.
De exemplu, avem un script care contează de la 1 și pentru totdeauna. Dar putem ieși programatic din buclă folosind o instrucțiune break în corpul buclei cu o condiție.
Mai întâi, creăm un fișier text folosind un editor de text în Linux, în acest caz folosim Editorul de text `vim`.
vim while.sh
#!/usr/bin/bash
i=1
in timp ce :
do
eco $i
dacă [ $i -eq 20 ]; apoi
echo Acesta este sfârșitul buclei
pauză
fi
((i++))
Terminat
Break declarație while loop în Linux
Din script și execuție, putem vedea că am reușit să întrerupem sau să ieșim dintr-o buclă infinită cu o instrucțiune condiționată și instrucțiunea break. Astfel, instrucțiunea break este folosită pentru a obține fluxul de control al unui program/script din interiorul unei bucle while pentru a ieși din buclă fără ca condiția buclei să fie evaluată ca falsă.
Continuați declarația în While Loop
Putem folosi instrucțiunea continue pentru a face opusul instrucțiunii break. Va sări la începutul blocului de buclă și va repeta din nou. Acesta poate fi folosit pentru a sări peste anumite comenzi pentru anumite condiții și, prin urmare, permite o schimbare a fluxului buclei.
De exemplu, dacă avem o variabilă inițializată la 1 și dorim să afișăm numai numerele divizibile cu cinci sau într-un anumit model în urma unei condiții, putem folosi instrucțiuni continue pentru a face exact asta. Acest lucru permite iterarea peste buclă în modul dorit.
Mai întâi, creăm un fișier text folosind un editor de text în Linux, în acest caz folosim Editorul de text `vim`.
vim while.sh
#!/usr/bin/bash
i=1
în timp ce [ $i -lt 30 ];
do
((i++))
dacă [[ $(( $i % 5 )) -ne 0 ]];
apoi
continua
fi
eco $i
Terminat
Continuați declarația în bucla While în linux
După cum putem vedea instrucțiunea continue, sare la începutul blocului și începe execuția comenzilor omitând comenzile următoare din bloc. Bucla while iterează doar pentru valoarea lui variabila i fiind mai mic de 30, deci condiția if verifică dacă variabila i este divizibil cu 5, iar dacă nu este, repetăm din nou folosind continuare și incrementăm valoarea variabilei i. The variabila i primește ecou doar dacă este divizibil cu 5, astfel încât condiția if este evaluată ca falsă și nu întâlnim o declarație continue și purtăm cu fluxul normal al buclei. Acest lucru se face pentru a evita înregistrarea fiecărui număr și pentru a tipări numai numerele care nu urmează un model sau o condiție în instrucțiunea if sau alte instrucțiuni condiționate.
Întrebări frecvente
1. Ce este un ` while`> buclă în scriptul Bash?
A while> bucla este o instrucțiune de flux de control în scripting-ul Bash care permite ca un anumit bloc de cod să fie executat în mod repetat atâta timp cât o condiție specificată este adevărată. Bucla oferă o modalitate de automatizare a sarcinilor repetitive și este o construcție fundamentală în scriptare și programare.
2. Cum funcţionează sintaxa unui ` while`> arata bucla in Bash?
Sintaxa de bază a lui a while> bucla în Bash este după cum urmează:
în timp ce [condiție]
do
# Codul de executat în timp ce condiția este adevărată
Terminat
` condition`> este un test care are loc înainte de fiecare iterație a buclei. Dacă condiția este adevărată, codul din buclă este executat. Dacă condiția este falsă, bucla se iese și scriptul continuă cu următoarea comandă după ` done`> afirmație.
3. Care este rolul lui ` (( ... ))`> construi într-un Bash while> buclă?
` (( ... ))`> construct în Bash este folosit pentru operații aritmetice. În contextul unui ` while`> buclă, este adesea folosit pentru a evalua condițiile aritmetice.
De exemplu: ` ((i <10))> `> verifică dacă variabila ` i`> este mai mic de 10. Acest lucru vă permite să utilizați expresii aritmetice direct în condiția buclei, făcându-l deosebit de util atunci când aveți de-a face cu comparații numerice.
4. Cum se creează o buclă infinită folosind ` while`> în Bash?
O buclă infinită în Bash poate fi creată prin furnizarea unei condiții care se evaluează întotdeauna la adevărat.
De exemplu:
în timp ce adevărat
do
# Cod pentru bucla infinită
Terminat
Alternativ, puteți utiliza o constantă diferită de zero în condiție, cum ar fi ` while [ 1 ]`> , pentru a obține același rezultat. Buclele infinite sunt utile în situațiile în care este necesară execuția continuă până la întreruperea manuală.
Concluzie
În acest articol am discutat despre bucla de scripting BASH, care se dovedește a fi un instrument versatil pentru a executa în mod repetat un bloc de cod pe baza unei condiții specificate. Sintaxa de bază implică definirea condiției între paranteze drepte, permițând iterații flexibile. Articolul explorează diverse aplicații ale buclelor while, inclusiv citirea din fișiere, crearea de bucle infinite, iterații fixe, analizarea argumentelor din linia de comandă și utilizarea instrucțiunilor break și continue. De la sintaxa în stil C până la scrierea interactivă a fișierelor, fiecare exemplu demonstrează adaptabilitatea buclei în abordarea unei game de nevoi de scripting. Această prezentare generală subliniază importanța buclei while în scripting-ul BASH, oferind un mecanism robust pentru repetarea controlată și execuția eficientă a codului.