30 Bash loop Exemple

trei tipuri de bucle sunt utilizate în bash pentru diverse scopuri. Acestea sunt pentru, în timp ce și până la bucle. Diferitele utilizări ale acestor bucle sunt explicate prin utilizarea a 30 de exemple diferite în acest articol.

utilizări ale buclelor Bash:

  1. utilizarea pentru buclă pentru a citi elementele dintr-o listă
  2. utilizarea pentru buclă pentru a citi o matrice
  3. utilizarea pentru buclă pentru a citi o listă de valori de șir cu spații
  4. utilizarea pentru buclă în {START..Sfârșit..INCREMENT} interval
  5. folosind pentru buclă în {START..Sfârșit..INCREMENT} gama merge înapoi
  6. folosind pentru buclă cu 3 părți și contor de condiții
  7. folosind pentru buclă cu 3 părți și Condiții și acțiuni multiple cu virgulă
  8. folosind infinit pentru buclă
  9. folosind pentru buclă cu pauză condiționată și continuați
  10. folosind pentru buclă pentru a citi numele fișierelor prin globbing
  11. pentru a citi ieșirea din comanda Find
  12. utilizarea For loop pentru a citi numele de fișiere ale unui director recursiv
  13. utilizarea For Loop pentru a citi numele de fișiere ale unui director recursiv cu condiția
  14. rularea buclei până la fișier există
  15. utilizarea pentru buclă pe baza ieșirii listei de pachete comanda
  16. utilizarea pentru buclă pentru a citi fiecare linie a unui fișier
  17. utilizarea pentru buclă pentru a citi fiecare linie a unui fișier pe baza unei potriviri condiționate
  18. utilizarea în timp ce buclă cu un contor
  19. utilizarea în timp ce buclă cu intrare de utilizator și 3373> combinarea în timp ce bucle cu getopts
  20. folosind până buclă cu un contor
  21. termina până buclă pe baza de intrare de utilizator
  22. folosind imbricate în timp ce bucle
  23. folosind până buclă pentru a dormi/așteptați pentru sarcina de fundal a început în script
  24. folosind în timp ce bucla pentru a citi pid de la ieșire ps care nu se termină
  25. căutarea orice șir într-un fișier folosind buclă și ieșire
  26. combinarea bash cu curl pentru a evalua datele de la URL-ul
  27. citirea datelor dintr-un port trimite prin netcat folosind în timp ce bucla
  28. ping URL sus în modul lot folosind o buclă și înregistrați ieșirea

utilizarea pentru buclă pentru a citi elementele dintr-o listă

cea mai simplă utilizare a buclei ‘pentru’ este citirea unei liste de date string sau numerice. Lista de date numerice este iterată utilizând bucla for-in în exemplul următor. Aici, patru numere vor fi citite în variabilă, $n în fiecare pas al buclei și tipărite. Creați un fișier bash cu următorul script și rulați de la terminal.

#!/ bin / bash
# pentru-în buclă pentru a citi o listă de numere
pentru n în 10 11 17 25
face
# imprima fiecare număr
ecou „numărul este $n”
făcut

ieșire:

rulați scriptul.

$ bash for1.sh

următoarea ieșire va apărea după rularea scriptului.

du-te la Partea de sus

utilizarea pentru buclă pentru a citi o matrice

orice variabilă matrice conține o listă de date care pot fi iterate foarte ușor prin utilizarea for-in buclă. Următorul exemplu arată utilizarea for-in buclă pentru a citi o serie de date șir. Aici, fiecare valoare matrice va prelua în variabila, $limba și imprima un mesaj bazat pe limba în fiecare iterație.

#!/bin/bash
languages=(„Bash Perl Python PHP”)
pentru limba în $languages
do
if
then
echo „$language is a Web programming language”
else
echo „$language is a scripting language”
fi
done

ieșire:

rulați scriptul.

$ bash for2.sh

următoarea ieșire va apărea după rularea scriptului.

du-te la Partea de sus

folosind pentru buclă pentru a citi o listă de valori șir cu spații

atunci când o listă de un șir este citit De for-in buclă și orice valoare șir conține spațiu, atunci valorile împărțit în cuvinte bazate pe spațiu în cazul în care valoarea șir nu este citat cu un singur sau dublu citat. Următorul exemplu arată cum o listă de valori șir cu spațiu poate fi citit De for-in buclă. Aici, o valoare a listei conține spațiu și este tipărită cu spațiul din ieșire.

#!/bin / bash
# pentru-în buclă pentru a citi lista de siruri de caractere cu spațiu
pentru sistemul de operare în „Ubuntu” „Linux Mint” „Fedora” „CentOS”
face
#imprima fiecare șir
echo „sistem de operare – $os”
făcut

ieșire:

rulați scriptul.

$ bash for3.sh

aici, valoarea șirului, ‘Linux Mint’ este imprimată corect.

du-te la Partea de sus

folosind pentru buclă în {START..Sfârșit..INCREMENT} interval

o altă utilizare a buclei for-in este citirea array-ului de gamă. În exemplul următor, o buclă for este utilizată pentru a citi o gamă de date de la 10 la 30, care este incrementată cu 5 în fiecare pas. Apoi, scriptul va imprima acele numere din intervalul care sunt divizibile cu 10.

#!/ bin / bash
# citiți un interval folosind pentru buclă
pentru num în {10..30..5}
do
# verificați dacă numărul este divizibil cu 10 sau nu
dacă (($num%10==0 ))
apoi
echo „$num este divizibil cu 10 ”
fi
făcut

ieșire:

rulați scriptul.

$ bash for4.sh

următoarea ieșire va apărea după rularea scriptului.

du-te la Partea de sus

folosind pentru buclă în {START..Sfârșit..INCREMENT} interval mergând înapoi

intervalul de date poate fi citit înapoi utilizând bucla for-in unde valoarea de pornire a intervalului este mai mare decât valoarea finală a intervalului. În exemplul următor, intervalul va începe de la 50 și se va termina la 30. Valoarea $num va fi decrementată cu 10 în fiecare etapă a buclei. Scriptul va imprima acele numere din intervalul care sunt divizibile cu 5 și 10.

#!/bin / bash
ecou „următoarele numere sunt divizibile cu 5 și 10”
# citiți un interval folosind pentru buclă
pentru num în {50..30..10}
do
# verificați dacă numărul este divizibil cu 5 și 10 sau nu
dacă (($num%5==0 && $num%10==0 ))
apoi
echo-n „$num „
fi
terminat
echo „terminat”

ieșire:

rulați scriptul.

$ bash for5.sh

următoarea ieșire va apărea după rularea scriptului.

du-te la Partea de sus

folosind pentru buclă cu 3 părți și stare counter

Bash sprijină pentru buclă cu trei părți ca alte limbaje de programare standard. Prima parte conține inițializare, a doua parte conține condiția de terminare și a treia parte conține operație de incrementare sau decrementare. Această buclă este utilizată în principal atunci când numărul de iterație este definit anterior. În exemplul următor, pentru buclă va itera de 50 de ori și se calculează suma de la 1 la 50. Rezultatul însumării se va imprima ca ieșire.

#!/bin / bash
# inițializați variabila
sum=0
# bucla va itera de 50 de ori
pentru (( N=1; n<=50; n++ ))
do
# adăugați valoarea sumei cu următoarea valoare a n
((sum=$sum+$n))
done
# imprimați rezultatul
Echo „suma de la 1 la 50 este suma $”

ieșire:

rulați scriptul.

$ bash for6.sh

suma de la 1 la 50 este afișată în ieșire.

du-te la Partea de sus

folosind pentru buclă cu 3 părți și condiții multiple și acțiuni cu virgulă

pentru buclă cu trei părți pot fi definite cu mai multe inițializări, condiții de terminare și acțiuni. Următorul exemplu arată utilizarea acestui tip de buclă. Aici, variabilele $x și $y sunt inițializate de 5 și 25. Bucla va continua până când valoarea $x este mai mică sau egală cu 20 și valoarea $y este mai mare decât 5. Valoarea lui $ x va crește cu 5, iar valoarea lui $y va scădea cu 5 în fiecare iterație a buclei. Valoarea curentă a $x și $ y în fiecare pas se va imprima ca ieșire.

#!/bin / bash
# bucla va itera pe baza a două condiții
pentru ((x = 5, y=25; x<=20 && y>5; x+ = 5, y- = 5))
face
ecou „valoarea curentă a x=$X și y=$Y”
făcut

ieșire:

rulați scriptul.

$ bash for7.sh

următoarea ieșire va apărea după rularea scriptului.

mergeți sus

folosind infinit pentru buclă

când orice buclă este definită fără nicio condiție de terminare, atunci bucla funcționează ca o buclă infinită. Următorul exemplu arată utilizarea infinite for loop care nu conține nicio parte de inițializare, terminare și acțiune. Acest tip de buclă pentru este definit prin punct și virgulă dublă (;;). Următorul script va continua bucla până când utilizatorul tastează ‘quit’ ca intrare. Scriptul va imprima orice număr de la 1 la 20, care va lua ca intrare altfel se va imprima „numărul este în afara intervalului”

#!/ bin / bash
# declara buclă infinită
pentru (( ; ; ))
faceți
# luați o intrare
echo „introduceți un număr între 1 și 20”
citiți n
# setați condiția de terminare a buclei
dacă
apoi
echo „programul terminat”
ieșiți 0
fi
# verificați intervalul de numere
dacă (( $n < 1 || $n > 20 ))
apoi
Echo „numărul este în afara intervalului”
altfel
Echo „numărul este $N”
fi
făcut

ieșire:

rulați scriptul.

$ bash for8.sh

aici, 6 este luat ca prima intrare care este un număr valid, 22 este luat ca a doua intrare care este un număr nevalid și quit este luat ca a treia intrare care a terminat scriptul.

Go to Top

Using for loop with conditional break and continue

instrucțiunea’continue’ este utilizată pentru a omite o parte(părți) a buclei pe baza oricărei condiții, iar instrucțiunea ‘break’ este utilizată pentru a termina bucla pe baza oricărei condiții. Următorul exemplu arată utilizările acestor declarații într-o buclă for. Aici, bucla este utilizată pentru a citi o listă de date șir și fiecare valoare din listă este stocată în variabila, $food. Când valoarea $food este ‘Soup’, atunci va continua bucla fără a imprima valoarea. Când valoarea $food este ‘paste’, atunci se va termina bucla. Când $food conține orice altă valoare decât’ supa ‘și’ paste’, atunci se va imprima valoarea. Deci, scriptul va imprima două valori din listă ca ieșire.

#!/bin / bash
# declarați o buclă cu o listă
pentru mâncare în supă de pizza burger paste tăiței
do
# setați condiția pentru continuare
dacă
atunci
continuați
# setați condiția pentru pauză
elif
apoi
pauză
altceva
echo „$food este preferatul meu”
fi
făcut

ieșire:

rulați scriptul.

$ bash for9.sh

aici, două valori sunt omise din listă. ‘Soup ‘nu este tipărit pentru declarația continue și’ paste ‘ nu este tipărit pentru declarația break.

du-te la Partea de sus

utilizarea pentru buclă pentru a citi numele de fișiere prin globbing

numele de fișiere sau conținutul special al unui fișier poate fi căutat utilizând globbing. Utilizează diferite tipuri de caractere wildcard pentru potrivirea oricărui nume de fișier sau căutarea conținutului în fișier. Toate fișierele cu extensia txt a locației curente sunt căutate tipărite de următorul exemplu. Când va rula script-ul, atunci toate numele de fișiere de potrivire vor fi imprimate fără newline ca ieșire.

#!/bin / bash
# Loop va căuta toate fișierele text și va stoca fiecare nume de fișier în $file
pentru fișier în „*.txt”;
face
# imprima numele fișierului
echo $fișier;
făcut

ieșire:

rulați scriptul.

$ bash for110.sh

du-te la Partea de sus

utilizarea pentru buclă pentru a citi ieșire din comanda find

‘find’ comanda este utilizată în scopuri diferite în bash. În exemplul următor, comanda ‘find’ este utilizată pentru a citi toate numele de fișiere text din locația curentă. Aici, opțiunea ‘- name ‘ de utilizat pentru căutarea sensibilă la majuscule. Deci, script – ul va imprima acele nume de fișiere de locația curentă care au ‘s.extensia txt cu orice nume. Aici, variabila IFS este utilizată pentru a defini linia nouă ca separator de câmp și pentru a imprima valoarea fișierului $în fiecare linie.

#!/ bin / bash
# Set separator de câmp
IFS=$’\n’;
# citiți fișierele unui director
pentru fișier în $(find-name „*.txt”); face
echo $ fișier
făcut
# uunset separator de câmp
unset IFS;

ieșire:

rulați scriptul.

$ bash pentru11.sh

următoarea ieșire va apărea după rularea scriptului.

du-te la Partea de sus

utilizarea pentru buclă pentru a citi numele de fișiere ale unui director recursiv

‘find’ comanda poate fi folosit pentru a citi toate fișierele și sub-foldere ale unui anumit director. Următorul exemplu arată utilizarea comenzii ‘ find ‘pentru a citi toate numele de fișiere și directoarele din Directorul’ mydir’. Aici, variabila IFS este utilizată pentru a imprima valoarea $filename cu ‘newline’ ca exemplul anterior.

#!/ bin / bash
# Set separator de câmp
IFS = $ ‘\n’;
# citiți fișierele unui director
pentru numele fișierului în $(Găsiți „mydir”)
faceți
ecou „$Nume fișier ”
terminat
# separator de câmp Unset
unset IFS;

ieșire:

rulați scriptul.

$ bash for12.sh

următoarea ieșire va apărea după rularea scriptului.

du-te la Partea de sus

folosind pentru buclă pentru a citi numele de fișiere ale unui director recursiv cu condiția

‘pentru’ buclă cu ‘găsi’ comanda poate fi folosit pentru a imprima som+

E nume de fișiere particulare ale unui director bazat pe orice condiție. comanda ‘find’ este utilizată cu o condiție în exemplul următor. Acesta va căuta numai nume de fișiere text din Directorul mydir. Aici, opțiunea ‘ – iname ‘este utilizată cu comanda’ find ‘ pentru căutarea incensibilă la majuscule. Asta înseamnă că toate fișierele cu extensia ‘ txt ‘ sau ‘ TXT ‘ vor fi potrivite și tipărite ca ieșire. Aici, variabila IFS este utilizată pentru a imprima valoarea $filename cu ‘newline’ ca exemplul anterior.

#!/ bin / bash
# Set separator de câmp
IFS=$’\n’;
# Citiți toate fișierele text ale unui director
pentru numele fișierului în $(Găsiți mydir-iname ‘*.txt’); face
ecou „$Nume fișier ”
făcut
# separator câmp Unset
unset IFS;

ieșire:

rulați următoarea comandă pentru a afișa lista de fișiere și foldere din Directorul mydir.

$ LS mydir

rulați scriptul.

$ bash pentru13.sh

există trei fișiere text în directorul care sunt afișate în ieșire.

mergeți sus

rularea buclei până când fișierul există

orice nume de fișier există sau nu este bifat în exemplul următor utilizând infinit pentru buclă. În acest script, un nume de fișier va lua ca intrare în fiecare iterație a buclei și testa numele de fișier este există în locația curentă sau nu. Dacă numele fișierului există, atunci scriptul va imprima” fișierul există „și va continua bucla, altfel va termina bucla imprimând mesajul, „fișierul nu există”.

#!/bin / bash
# Define infinite loop
for(( ; ; ))
do
# introduceți un nume de fișier
echo „introduceți un nume de fișier”
citiți fișierul
# verificați dacă fișierul există sau nu
dacă
atunci
echo „numele fișierului nu există”
exit 0
else
Echo „fișier există”
fi
făcut

ieșire:

rulați scriptul.

$ bash loop14.sh

un nume de fișier existent este dat ca prima intrare și un nume de fișier inexistent este dat ca a doua ieșire care a terminat scriptul.

du – te la Partea de sus

folosind pentru buclă pe baza comenzii de ieșire a listei de pachete

informațiile despre pachetele instalate în sistem pot fi preluate de comanda `apt list- – installed`. bucla ‘ for ‘ este utilizată în exemplul următor pentru a citi informațiile despre pachet instalate din comanda Listă de pachete și pentru a imprima fiecare informație despre pachet în fiecare linie. Variabila IFS este folosită aici pentru a imprima valoarea $line cu ‘newline’ ca în exemplul anterior.

# setați separatorul de câmp
IFS = $ ‘\n’;
# Citește fișier linie cu linie
pentru linie în $(lista apt-instalat)
face
echo „$line ”
făcut
# separator câmp Unset
unset IFS;

ieșire:

rulați scriptul.

$ bash for15.sh

ieșirea afișează lista pachetelor instalate.

du-te la Partea de sus

utilizarea pentru buclă pentru a citi liniile unui fișier

există mai multe moduri de a citi un fișier în bash. comanda ‘ cat ‘ este utilizată în exemplul următor pentru a citi fișierul, temp.txt. Fiecare linie a fișierului va stoca în variabila, $ line și imprima linia în fiecare iterație de buclă pentru. Variabila IFS este folosită aici pentru a imprima valoarea $line cu ‘newline’ ca în exemplul anterior.

#!/ bin / bash
# Set separator de câmp
IFS=$’\n’;
# Citește fișier linie cu linie
pentru linie în $(Cat temp.txt)
face
echo „$ line”
făcut
# separator câmp Unset
IFS unset;

ieșire:

rulați scriptul.

$ bash pentru 16.sh

du-te la Partea de sus

utilizarea pentru buclă pentru a citi liniile unui fișier cu potrivire condiționată

dacă doriți să imprimați anumite linii dintr-un fișier numai atunci trebuie să adăugați în interiorul bucla care este folosit pentru a citi fișierul. Următorul exemplu imprimă ieșire formatat de fiecare linie de ‘ zi lucrătoare.txt ‘ fișier bazat pe o condiție. Dacă orice linie a fișierului conține valoarea, ‘duminică ‘atunci se va imprima’ vacanță ‘mesaj altfel se va imprima’ zi lucrătoare ‘ mesaj.

# citiți fișierul
pentru linia în $(ziua săptămânii cat.Txt)
do
#comparați valoarea cu un șir de date
dacă
atunci
echo „$line este o vacanță”
altfel
echo „$line este o zi lucrătoare”
fi
făcut

ieșire:

rulați scriptul.

$ bash for17.sh

următoarea ieșire va apărea după rularea scriptului.

du-te la Partea de sus

folosind în timp ce bucla cu un contor

$variabila contra este folosit orice buclă pentru a controla iterația buclei. Următorul exemplu arată utilizarea în timp ce bucla cu contorul. Aici, $ counter este inițializat la 1 și în timp ce bucla va itera de 5 ori și va imprima valoarea $counter în fiecare iterație. $ counter este incrementat cu 1 în fiecare pas pentru a ajunge la starea de terminare a buclei.

#!/bin / bash
# inițializa counter
counter=1
# Itera bucla de 5 ori
în timp ce
do
echo „Counter value = $counter”
((counter++))
done

ieșire:

rulați scriptul.

$ bash loop18.sh

mergeți în partea de sus

folosind while loop cu user input și quit când selectați exit din meniul

‘while’ loop este utilizat în exemplul următor pentru a afișa un meniu cu 5 opțiuni. Primele Patru opțiuni sunt utilizate pentru a efectua patru operații aritmetice bazate pe intrarea utilizatorului, iar ultima opțiune este utilizată pentru a ieși din script. Meniul va apărea după furnizarea a două numere ca intrare. Dacă utilizatorul selectează ‘ 1 ‘ atunci numerele de intrare vor fi adăugate. Dacă utilizatorul selectează ‘ 2 ‘ atunci al doilea număr de intrare va fi scăzut din primul număr de intrare. Dacă utilizatorul selectează ‘3’, atunci numerele de intrare vor fi înmulțite și dacă utilizatorul selectează’ 4′, atunci primul număr de intrare va fi împărțit la al doilea număr de intrare.

#!/bin / bash
# luați două numere
echo „introduceți un număr”
citiți N1
echo „introduceți un număr”
citiți n2
# declarați o buclă infinită
în timp ce adevărat
faceți
# Afișați meniul
echo „1. Adăugare „
ecou ” 2. Scăderea „
ecou ” 3. Multiplicarea „
ecou ” 4. Divizia „
echo ” 5. Ieșire „
echo-n ” Selectați orice număr din :”
citiți intrarea
# efectuați operația pe baza valorii selectate
dacă ]
apoi
((rezultat=N1+n2))
elif ]
apoi
((rezultat=n1-n2))
elif ]
apoi
((rezultat=$n1*$n2))
Elif ]
apoi
((rezultat=$n1/$n2))
Elif ]
apoi
ieșire 0
altfel
Echo „intrare nevalidă”
fi
Echo „rezultatul este $rezultat”
făcut

ieșire:

rulați scriptul.

$ bash loop19.sh

următoarea ieșire va apărea după selectarea opțiunii 2 și 5.

du-te la Partea de sus

combinarea în timp ce bucle cu getopts

‘getopts’ este o funcție built-in de bash, care este folosit pentru a citi argumente și opțiuni în script-ul bash. Următorul exemplu arată utilizarea funcției getopts, care este utilizat într-o buclă în timp ce. Aici, trei valori de opțiune sunt utilizate cu getopts. Acestea sunt ‘a’, ‘r’și ‘ c’. Trei mesaje diferite vor fi tipărite pentru aceste opțiuni.

#!/ bin / bash
# citiți opțiunea și stoca într-o variabilă
în timp ce getopts” arc ” opțiune; Faceți
# Verificați valoarea opțiunii
case ${opțiune} în
a) # Opțiunea A
echo „procesul este avortat”
;;
r) # opțiunea r
echo „procesul este repornit”
;;
c) # Opțiunea C
echo „procesul continuă”
;;
\? ) # opțiune nevalidă
ecou ” utilizare: sau sau „
;;
esac
efectuat

ieșire:

rulați scriptul cu opțiuni valide.

$ bash loop20.sh -arc

rulați scriptul cu o opțiune nevalidă.

$ bash loop20.sh-h

du-te la Partea de sus

folosind până bucla cu un contor

până bucla poate fi utilizat cu un contor ca în timp ce bucla care este prezentat înainte. Următorul exemplu arată utilizarea până bucla cu un contor. Aici ,variabila $ counter este utilizată pentru a controla iterația buclei care este inițializată la 1. Bucla până va continua până când valoarea $ contra la 5. Deci, bucla va itera de 6 ori și va imprima valoarea $counter în fiecare pas. $ counter va fi decrement de 1 în fiecare pas pentru a ajunge la starea de terminare a buclei.

#!/bin / bash
# inițializa contorul
counter = 10
# Itera bucla de 6 ori
până la
do
ecou „valoarea curentă a counter = $counter”
((counter–))
done

ieșire:

rulați scriptul .

$ bash loop21.sh

du-te la Partea de sus

termina până buclă pe baza de intrare utilizator

orice buclă se termină pe baza unei anumite condiții. Cum până bucla poate fi încheiată pe baza de intrare de utilizator, este prezentat în exemplul următor. Conform condiției de terminare, bucla se va termina atunci când valoarea numărului $este mai mare de 50. Valoarea $număr nu este incrementat în interiorul buclei. Deci., bucla va continua să preia intrarea de la utilizator până când un număr mai mare de 50 este luat ca intrare.

#!/bin / bash
# inițializați numărul
număr = 0
# Setați modelul pentru date numerice
model=’^+$’
# setați condiția de terminare
până la
do
echo-n „introduceți un număr:”
citiți numărul
# verificați dacă valoarea de intrare este număr sau nu
dacă ! ]
apoi
ecou ” eroare: Nu este un număr „
număr=0
altfel
ecou”ați introdus $număr”
fi
făcut

ieșire:

rulați scriptul.

$ bash loop22.sh

scriptul va itera bucla din nou pentru valoarea de intrare 4, va afișa mesajul de eroare pentru valoarea de intrare, gg și va termina bucla pentru valoarea de intrare 54.

mergeți sus

folosind imbricate în timp ce buclele

când o buclă este declarată în interiorul unei alte bucle, atunci se numește buclă infinită. Următorul exemplu arată utilizarea imbricate în timp ce bucla. Aici, prima buclă în timp ce va itera de 2 ori, iar a doua buclă în timp ce în interiorul primei bucle va itera de trei ori. Iterația totală a buclelor este de 2 3=6 ori. variabilele $i și $j sunt utilizate pentru a controla iterația acestor bucle, iar valorile acestor variabile din fiecare pas sunt tipărite ca ieșire.

#!/bin/bash
# inițializați i și j
i=1
j=1
# setați condiția de terminare pentru i
în timp ce
Faceți
# setați condiția de terminare pentru j
în timp ce
faceți
# imprimați valoarea curentă a i și j
printf „i=%d, j=%d\n” $i $j
((j++))
terminat
j=1
((i++))
terminat

ieșire:

rulați scriptul.

$ bash loop23.sh

du-te la Partea de sus

folosind până buclă pentru a dormi/așteptați pentru sarcina de fundal a început în script

orice proces poate fi rulat în fundal folosind ‘&’ simbol. Modul în care un proces poate fi rulat în fundal folosind until loop și terminate the loop pe baza timpului specificat în comanda sleep este prezentat în acest exemplu. Aici, variabila $ cnt este utilizată pentru a termina bucla. Bucla va începe procesul de fundal și va scrie ieșirea într-un fișier text numit „ieșire.txt ” timp de 1 secundă. După aceea, condiția de terminare a buclei va verifica și va reveni fals. Apoi, scriptul va imprima un mesaj, „Sleeping…” și va ieși din script după 3 secunde.

#!/bin / bash
# inițializați contorul
cnt=1
# setați condiția de terminare
până la
faceți
ecou „procesul de fundal rulează”;
# așteptați 1 secundă
somn 1;
((cnt++))
terminat > ieșire.txt &
# așteptați 3 secunde
ecou „dormit…”
somn 3

ieșire:

rulați scriptul.

$ bash loop24.sh

verificați ieșirea scriptului.

$ ieșire pisică.txt

Go to Top

Using while loop to read pid from Ps output that is not terminate

comanda’ps’ este utilizată pentru a obține informații despre toate procesele care rulează ale sistemului. Acesta oferă informații detaliate cu privire la orice proces care rulează, cum ar fi ID-ul de utilizator, PID, utilizarea procesorului, utilizarea memoriei, etc. Următorul exemplu arată cum o buclă while poate fi utilizată pentru a citi informațiile despre procesul de rulare legate de ‘apache’. Aici, variabila IFS este utilizată pentru a imprima PID-ul fiecărui proces cu o linie nouă. Apoi, va aștepta ca utilizatorul să apese orice tastă pentru a ieși din script.

#!/bin | bash
# Set separator de câmp
IFS=’ ‘
în timp ce
face
# prelua toate rulează ID-ul procesului de apache
pid=`ps-ef | grep „apache” / awk ‘{print $2 ” proces se execută …”} „
echo $pid
# așteptați 1 secundă
sleep 1
# apăsați orice tastă pentru a termina bucla
echo „apăsați orice tastă pentru a termina”
dacă citiți-r-N 1 ; apoi
pauză
fi
terminat
# separator de câmp Unset
unset IFS

ieșire:

rulați scriptul.

$ bash loop25.sh

PID-ul tuturor proceselor de rulare bazate pe ‘apache’ este afișat în ieșire.

mergeți la început

căutând orice șir dintr-un fișier folosind buclă și ieșiți

creați un fișier numit lună.txt cu următorul conținut pentru a testa scriptul bash de mai jos.

lună.txt

January
February
March
April
May
June
July
August
September
October
November
December

‘în timp ce’ Buclă este utilizat în exemplul următor pentru a citi luna.fișier txt linie cu linie. Dacă orice linie conține valoarea, „iunie”, atunci se va imprima „bucurați-vă de vacanța de vară” și se va termina din script, altfel se va imprima valoarea $line.

#!/bin / bash
# Setați numele fișierului să citească
Nume fișier=”lună.txt”
# Citește fișier linie cu linie
în timp ce IFS= read-r linie
do
# Verificați valoarea liniei este egală cu iunie
# rezilia programul dacă condiția este adevărată
dacă ];
apoi
echo „bucurați-vă de vacanța de vară”
ieșire 0
else
echo $linie
fi
făcut < $Nume fișier

ieșire:

rulați scriptul.

$ bash loop26.sh

aici, ‘iunie’ există în luna fișier.txt care termină bucla. Deci, alte nume de luni după ‘iunie’ nu va citi de bucla.

mergeți la început

combinați bash cu curl pentru a evalua datele de la URL

datele pot fi transferate către sau de la orice server de rețea din bash utilizând comanda ‘curl’ cu orice protocol acceptat, cum ar fi HTTP, FTP, TELNET etc. Este un instrument de linie de comandă. Cum’ curl ‘ comanda poate fi folosit pentru a evalua datele de la URL-ul folosind pentru buclă este prezentată în exemplul următor. Aici, pentru bucla va citi o listă de url-ul și trece fiecare valoare URL-ul în curl și imprima datele primite de la URL-ul.

#!/ bin / bash
# citiți fiecare URL din listă
pentru url în „yahoo.com” „youtube.com „
do
# Print HTTP cod de răspuns pentru fiecare URL
echo $url; curl-v-m 5-s $1″ $url ” | grep HTTP/1.1;
done

ieșire:

rulați scriptul.

$ bash loop27.sh

du-te la Partea de sus

citirea datelor dintr-un port trimite prin netcat folosind în timp ce bucla

‘netcat’ comanda este folosit pentru a citi și scrie date prin rețea folosind TCP sau udp protocol. comanda ‘ nc ‘este utilizată în bash pentru a rula comanda’ netcat’. Următorul exemplu arată utilizarea comenzii’ nc ‘ în while loop. Aici, scriptul va încerca să se conecteze cu portul 1234 folosind comanda nc și va imprima un mesaj în celălalt terminal dacă se poate conecta. Trebuie să deschideți o altă fereastră sau filă terminal pentru a rula comanda, ‘NC localhost 1234’ pentru a face o conexiune. După stabilirea conexiunii, orice mesaj poate fi transferat de la un terminal la altul.

#!/bin / bash
echo ” ascultare pe portul 1234 …”
# citiți mesajul transmis de netcat la portul 1234
în timp ce citiți textul
faceți
# încheiați bucla dacă mesajul primit este „quit”
dacă ; apoi
echo „Bye”
break
else
echo „$text”
fi
# imprimați mesajul când portul este conectat
făcut < <((printf „bine ai venit.\r \ nType un mesaj :”) / nc -l 1234)

ieșire:

rulați scriptul într-un terminal pentru a începe ascultarea la portul 1234.

$ bash loop28.sh

apoi, deschideți un alt terminal și executați următoarea comandă pentru a comunica cu

primul terminal.

$ nc localhost 1234

acesta va afișa un mesaj de bun venit în al doilea terminal. Dacă utilizatorul tastează ceva în al doilea terminal, atunci acesta va fi afișat în primul terminal. Când utilizatorul va tasta ‘ quit ‘în al doilea terminal, atunci scriptul se va termina afișând un mesaj,’ Bye ‘ în primul terminal.

du-te la început

ping URL folosind o buclă

puteți afla orice site web este live sau nu executând comanda ‘ping’ cu adresa URL a site-ului. comanda ‘ ping ‘este folosită cu ‘google.com’ în exemplul următor pentru a verifica conexiunea la Internet este de lucru sau nu. În timp ce bucla va repeta de 5 ori în script-ul și să încerce să ping google.com. Dacă serverul răspunde, atunci va imprima „Internetul funcționează” și va termina bucla. Dacă bucla iterează de 5 ori și nu primește niciun răspuns la server, atunci va imprima „fără conexiune la Internet”.

#!/bin / bash
# setați contorul
count=5
în timp ce ]
do
# încercați să ping google.com
ping-c 1 google.com
c=$?
# Verificați codul de stare
dacă]
apoi
echo „Internetul funcționează”
ieșire 0
fi
# Decrementați contorul
((numărați -))
terminat
echo „nu există conexiune la Internet”

ieșire:

rulați scriptul.

$ bash loop29.sh

veți obține o ieșire similară dacă conexiunea dvs. la Internet funcționează corect.

du-te la Partea de sus

rularea top în modul de lot, folosind o ieșire buclă și înregistrare

‘top’ comanda este un instrument administrativ Linux, care este folosit pentru a examina utilizarea resurselor de sistem, gestiona diferite sarcini și monitoriza procesele care rulează. Cum puteți rula comanda ‘ top ‘ în modul batch folosind pentru buclă și stoca înregistrările într-un fișier text este prezentat în exemplul următor. Aici, Opțiunea-b este utilizată pentru a porni comanda ‘top’ în modul batch și opțiunea-p este utilizată pentru a seta ID-ul procesului pe care doriți să îl monitorizați. Ieșirea comenzii ‘ top ‘ va fi stocată în ieșire.fișier txt.

#!/bin | bash
# Loop va itera de 5 ori și va executa comanda top
pentru ((i=0; i<5; i++))
do
top-B-P 2875-N1 / tail -1 >> ieșire.Txt
efectuat

ieșire:

mai întâi, executați următoarea comandă pentru a găsi lista proceselor care rulează.

$ ps

acum, rulați scriptul.

$ bash loop30.sh

rulați următoarea comandă pentru a vizualiza ieșirea scriptului.

$ ieșire pisică.txt

du-te la Partea de sus

concluzie

buclele pot fi utilizate în bash în diferite moduri de a face diferite tipuri de sarcini simple sau complexe. Cum pot fi utilizate trei tipuri de bucle în bash pentru diferite sarcini, cum ar fi preluarea listei sau a matricei, citirea fișierelor sau orice ieșire de comandă etc. sunt prezentate în acest articol folosind exemple foarte simple. Sper că aceste exemple vor ajuta cititorul să înțeleagă mai clar utilizările buclei bash.

Lasă un răspuns

Adresa ta de email nu va fi publicată.

More: