Sve što trebate znati o Bash For Loops u Linuxu

Sve što trebate znati o Bash For Loops u Linuxu

Bash skripte vrlo su učinkovito sredstvo za automatiziranje zadataka, osobito onih koji koriste druge postojeće programe. Ova automatizacija često zahtijeva ponavljanje slične operacije nekoliko puta, što je upravo mjesto gdje se za petlju dolazi na svoje.





Administratori sustava Linux i Mac obično su upoznati sa skriptiranjem putem terminala, ali čak i korisnici sustava Windows mogu krenite u akciju s Windows podsustavom za Linux .





Kako Bash skripte funkcioniraju

Bash skripta je jednostavno tekstualna datoteka koja sadrži niz naredbi koje bash ljuska može čitati i izvršavati. Bash je zadana ljuska u pre-Catalina macOS-u i većini distribucija Linuxa.





Ako nikada prije niste radili s shell skriptom, trebali biste početi s najjednostavnijim slučajem. To će vam omogućiti vježbanje ključnih pojmova, uključujući stvaranje skripte i njezino izvršavanje.

Najprije stvorite sljedeću datoteku na prikladnom mjestu (u idealnom slučaju otvorite terminal i prijeđite do željenog direktorija):



#!/bin/bash
echo 'Hello, World'

Prvi redak govori onome što pokreće ovaj program kako ga pokrenuti (tj. Pomoću bash tumača). Druga je samo naredba kao i svaka druga koju možete unijeti u naredbeni redak. Spremite tu datoteku kao hello_world.sh , zatim:

$ chmod +x hello_world.sh
$ ./hello_world.sh

The chmod naredba u prvom retku čini datoteku izvršnom, što znači da se može pokrenuti upisivanjem njezinog imena, kao u drugom retku.





Ako vidite riječi Hello, World pojavljuju se ispisane na retku na vašem terminalu, sve radi kako je potrebno.

Kako For Loops funkcioniraju

U općenitom programiranju postoje dvije glavne vrste for petlje: numerički i za svakoga . Numerički tip tradicionalno je najčešći, ali u bash upotrebi obično je obrnuto.





Numerički za petlje obično se usredotočuju na jedan cijeli broj koji određuje koliko će se iteracija izvesti, na primjer:

for (i = 0; i <100; i++) {
/* statements to execute repeatedly */
}

Ovo je petlja poznatog izgleda koja će ponavljati točno 100 puta, osim ako se i promijeni unutar petlje, ili druga naredba uzrokuje zaustavljanje izvođenja for petlje.

Foreach petlje, naprotiv, teže djelovanju na strukturama kao što su popisi ili nizovi, te ponavljaju za svaku stavku unutar te zbirke:

people = [ 'Peter', 'Paul', 'Mary' ]
foreach (people as person) {
if (person == 'Paul') {
...
}
}

Neki jezici koriste nešto drugačiju sintaksu koja mijenja redoslijed prikupljanja i stavke:

people = [ 'Peter', 'Paul', 'Mary' ]
for (person in people) {
if (person == 'Paul') {
...
}
}

Za u petljama

U bash, foreach - ili za u - petlja je češća. Osnovna sintaksa je jednostavno:

for arg in [list]
do
/* statements to execute repeatedly */
/* the value of arg can be obtained using $arg */
done

Na primjer, za ponavljanje kroz tri datoteke s izričitim imenom:

kako ukloniti vokal u drskosti
for file in one.c two.c three.c
do
ls '$file'
done

Ako takve datoteke postoje u trenutnom direktoriju, izlaz iz ove skripte bit će:

one.c
two.c
three.c

Umjesto fiksnog skupa datoteka, popis se može dobiti putem glob uzorka (jedan uključuje zamjenske znakove - posebne znakove koji predstavljaju druge znakove). U sljedećem primjeru petlja for ponavlja sve datoteke (u trenutnom direktoriju) čiji nazivi završavaju s '.xml':

for file in *.xml
do
ls -l '$file'
done

Evo nekoliko primjera izlaza:

$ -rw-r--r-- 1 bobby staff 2436 3 Nov 2019 feed.xml
$ -rw-r--r-- 1 bobby staff 6447 27 Oct 16:24 sitemap.xml

Ovo može izgledati poput dugotrajnog načina rada:

$ ls -l *.xml

No postoji značajna razlika: for petlja izvršava ls program 2 zasebna puta, pri čemu mu se svaki put prenosi jedan naziv datoteke. U zasebnom primjeru ls, glob uzorak (*.xml) prvo se podudara s imenima datoteka, a zatim ih sve šalje, kao pojedinačne parametre naredbenog retka, u jednu instancu ls .

Evo primjera koji koristi zahod (broj riječi) program za poboljšanje razlike:

$ wc -l *.xml
44 feed.xml
231 sitemap.xml
275 total

The zahod program broji broj redaka u svakoj datoteci zasebno, a zatim ispisuje ukupni broj redova u svim datotekama. Nasuprot tome, ako zahod radi unutar for petlje:

for file in *.xml
do
wc -l $file
done

I dalje ćete vidjeti broj za svaku datoteku:

44 feed.xml
231 sitemap.xml

No, nema ukupnog sažetka ukupnog iznosa jer zahod se izvodi izolirano, svaki put kada petlja ponavlja.

Kad popis nije popis

Postoji vrlo laka i česta pogreška pri rukovanju for petljama, zbog načina na koji bash obrađuje citirane argumente/nizove. Prelistavanje popisa datoteka treba obaviti ovako:

for file in one.c two.c

Ne ovako:

for file in 'one.c two.c'

Drugi primjer sadrži nazive datoteka u dvostrukim navodnicima što rezultira popisom sa samo jednim parametrom; for petlja će se izvršiti samo jednom. Ovaj se problem može izbjeći korištenjem varijable u takvim slučajevima:

FILES='one.c two.c'
for file in $FILES
do
...
done

Imajte na umu da sama deklaracija varijable svoju vrijednost mora staviti u dvostruke navodnike!

na koga je registriran ovaj broj

Za Bez popisa

Bez ičega za ponavljanje, for petlja radi na bilo kojim argumentima naredbenog retka koji su skripti dali pri pozivanju. Na primjer, ako imate skriptu pod nazivom args.sh koji sadrži sljedeće:

#!/bin/sh
for a
do
echo $a
done

Izvođenje args.sh će vam dati sljedeće:

$ ./args.sh one two three
one
two
three

Bash prepoznaje ovaj slučaj i liječi za napraviti kao ekvivalent za $@ do gdje je $@ posebna varijabla koja predstavlja argumente naredbenog retka.

Oponašanje tradicionalnog numeričkog za petlju

Bas skripte često se bave popisima datoteka ili linijama ispisa iz drugih naredbi, pa je tip in for petlje uobičajen. Međutim, tradicionalna operacija u stilu c i dalje je podržana:

for (( i=1; i<=5; i++ ))
do
echo $i
done

Ovo je klasični oblik s tri dijela u kojima:

  1. varijabla se inicijalizira (i = 1) pri prvom susretu s petljom
  2. petlja se nastavlja sve dok je uvjet (tj<=5) is true
  3. svaki put oko petlje, varijabla se povećava (i ++)

Promjena između dvije vrijednosti dovoljno je uobičajen zahtjev da postoji kraća, malo manje zbunjujuća alternativa:

for i in {1..5}
do
echo $i
done

Ekspanzija zagrade koja se događa učinkovito prevodi gornju for petlju u:

for i in 1 2 3 4

Finer Loop Control with Break and Continue

Složeniji za petlje često trebaju način ranog izlaska ili odmah ponovno pokretanje glavne petlje sa sljedećom vrijednošću. Da biste to učinili, bash posuđuje naredbe break i continue koje su uobičajene u drugim programskim jezicima. Evo primjera koji koristi oboje za pronalaženje prve datoteke koja ima više od 100 znakova:

#!/bin/bash
for file in *
do
if [ ! -f '$file' ]
then
echo '$file is not a file'
continue
fi
num_chars=$(wc -c <'$file')
echo $file is '$num_chars characters long'
if [ $num_chars -gt 100 ]
then
echo 'Found $file'
break
fi
done

For petlja ovdje radi na svim datotekama u trenutnom direktoriju. Ako datoteka nije obična datoteka (npr. Ako je direktorij), naredba continue koristi se za ponovno pokretanje petlje sa sljedećom datotekom. Ako je to obična datoteka, drugi uvjetni blok će utvrditi sadrži li više od 100 znakova. Ako je tako, naredba break koristi se za trenutno napuštanje for petlje (i dolazak do kraja skripte).

Zaključak

Bash skripta je datoteka koja sadrži skup uputa koje se mogu izvršiti. For petlja omogućuje da se dio skripte ponavlja više puta. Pomoću varijabli, vanjskih naredbi i naredbi break and continue, bash skripte mogu primijeniti složeniju logiku i izvesti širok raspon zadataka.

Udio Udio Cvrkut E -pošta Isplati li se nadogradnja na Windows 11?

Windows je redizajniran. No, je li to dovoljno da vas uvjeri da prijeđete s Windows 10 na Windows 11?

Pročitajte Dalje
Povezane teme
  • Programiranje
  • Linux
O autoru Bobby Jack(Objavljeno 58 članaka)

Bobby je entuzijast u tehnologiji koji je skoro dva desetljeća radio kao programer softvera. Oduševljen je igranjem igara, radi kao urednik recenzija u Switch Player Magazinu, a uronjen je u sve aspekte online izdavaštva i web razvoja.

Više od Bobbyja Jacka

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu