Bash 'For' petlja: Vodič i primjeri

Bash (Bourne Again Shell) je naredbeni redak ljuske i skriptni jezik u GNU/Linux operativnim sustavima. To je zadana ljuska za većinu Linux distribucija.

Kao i većina skriptnih jezika, Bash nudi sintaksu petlje za ponavljanje sličnih zadataka više puta. U ovom članku ćemo naučiti kako koristiti za petlja u Bashu.

Uvod

Tipična Bash skripta sadrži niz naredbi koje se izvršavaju jedna za drugom. Varijable se mogu koristiti za pohranjivanje nizova, vrijednosti cjelobrojnih indeksa, rezultata naredbe, itd. Petlje su potrebne kada korisnik želi izvršiti određenu naredbu više puta. Od posebne je koristi kada je izlaz jedne naredbe u obliku liste, a na svakom rezultatu, na popisu, treba pokrenuti drugu naredbu.

Opća sintaksa

Opća sintaksa za za petlja u Bashu je:

za u do ... ... gotovo

Evo, je Bash varijabla, koja mora biti valjano ime varijable ljuske Linuxa, tj. ime sadrži kombinaciju slova (az, AZ), brojeva (0-9) i donje crte ( _ ) i mora početi slovom ili podvlaka.

The je ili prilagođeni raspon cijelih indeksa koji će biti u petlji ili prilagođeni popis cijelih brojeva ili nizova. Također može sadržavati drugu Linux naredbu, međutim, izlaz takve naredbe mora biti odvojen razmacima ili znakovima za novi red, tj. Bash ih može analizirati u listu (popis u Bashu je u osnovi zbirka vrijednosti odvojenih razmakom ili novim redom ).

Koju god naredbu(e) treba izvršiti mora se staviti unutar učiniti..gotovo blok.

Pogledajmo nekoliko jednostavnih primjera.

Petlja na raspon vrijednosti Integer: Sljedeći kod stvara direktorije pod nazivom dir1, dir2, dir3 do dir10.

za ja u {1..10} do mkdir dir$i dovršeno

Petlja na popisu fiksnih vrijednosti: Sljedeći kod ispisuje svaki niz ili cijeli broj na danom fiksnom popisu.

za mene u Hello 1 2 3 Zbogom! do echo $i učinio

Petlja na izlazu naredbe: Sljedeći kod petlje preko izlaza ls i ispisuje naziv svake datoteke u zadanom formatu.

for i u `ls` do echo "Ime datoteke je $i" gotovo

Sintaksa temeljena na izrazu

Sintaksa zasnovana na izrazu slična programskom jeziku C također je moguća u Bashu:

za ((Izraz 1; Izraz 2; Izraz 3)) učiniti ... ... urađeno

Ovdje, Izraz 1 je inicijalizacija indeksne varijable(e). Izraz 2 je uvjet kada se iz petlje mora izaći; ovaj uvjet se provjerava u svakoj iteraciji. Izraz 3 specificira povećanje/smanjenje/izmjenu vrijednosti indeksne varijable(e)

Sljedeći primjer jednostavno ispisuje vrijednosti od 0 do 4:

za ((i=0;i<5;i++)) do echo $i done

Sljedeći primjer stvara beskonačnu petlju, budući da nisu navedeni izrazi:

za (( ; ; )) do echo "Pritisnite Ctrl-C za zaustavljanje" gotovo

Prekini i nastavi

Izjava o prekidu za uvjetni izlaz

Također možemo koristiti uvjetni izraz ako unutar petlje. The ako izjava se može koristiti s a pauza izjavu, za uvjetni izlazak iz petlje.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then break else echo $i; fi gotovo

Gornja petlja će ispisati brojeve od 0 do 4. Zatim kada je vrijednost i 5, ona će izbiti iz petlje. Ovo je od posebne koristi kada treba izaći iz petlje kada naredba daje određeni izlaz. Na primjer, sljedeća petlja se prekida ako i kada pronađe praznu datoteku.

za datoteku u `ls` do flen=`wc -c $file` ako [[ "$flen" = "0 $file" ]] onda echo "$file je prazna" prekid inače echo $flen fi gotovo 

Zapovijed wc -c ispisuje broj redaka u datoteci . Ispisuje ga u formatu , na primjer, 10 test.txt. Izlazimo iz petlje kada je broj redaka 0, tj. prazna datoteka.

Naredba Continue za uvjetno preskakanje iteracije

Slično C-u i mnogim drugim programskim jezicima, bash također ima a nastaviti izraz, za preskakanje preostalog dijela iteracije u petlji ako je zadovoljen određeni uvjet.

za ((i=0;i<10;i++)) učini ako [[ $i -eq 5 ]] zatim nastavi fi echo $i; učinjeno

Gornja petlja će ispisati brojeve od 0 do 10, osim 5, jer tijekom iteracije i=5 postoji naredba continue, koja će preskočiti ostatak koda u petlji na početku s iteracijom i=6.

U sljedećem primjeru ispisujemo broj redaka u datoteci, a određena iteracija će nastaviti ako je to direktorij, a ne datoteka.

za datoteku u `ls` uradi if [[ -d $file ]] zatim nastavi fi wc -c "$file" gotovo

[[ -d $datoteka ]] provjerava je li datoteka direktorij. Ako jest, onda preskačemo na sljedeću datoteku, tj. na sljedeću iteraciju. Ako to nije imenik, ispisujemo broj redaka u datoteci pomoću zahod naredbu, kao što je također prikazano ranije.

Korištenje petlji: skripte i naredbeni redak

Sintaksa petlje može se koristiti u Bash ljusci izravno ili iz datoteke skripte ljuske. Jednom za sintaksa petlje je unesena u ljusku, ljuska nastavlja s promptom kako bi korisniku omogućio da nastavi s naredbama koje treba petljati.

U suprotnom, korisnik to može spremiti u datoteku skripte i izvršiti datoteku skripte.

The #!/bin/bash na početku određuje interpreter koji će se koristiti kada se datoteka izvršava. Iako je Bash najčešće korištena školjka danas, neki korisnici preferiraju školjke poput zsh, koji bi trebao biti naveden umjesto bash na početku ove datoteke.

Da biste dali dopuštenja za izvršavanje za ovu datoteku pokrenite:

chmod +x test.sh

Konačno, da izvršite datoteku, trčanje:

./test.sh

Zaključak

The za petlja u Bashu je prilično jednostavna značajka, ali se koristi u gotovo svim vrstama složenih scenarija skriptiranja. Učenje je daleko bez obzira jeste li redoviti ili napredni korisnik Linuxa ili počinjete učiti automatizaciju za zadatke administracije sustava i DevOps.