Bash skripte vrlo su učinkovito sredstvo za automatizaciju zadataka, posebno onih koji koriste prednosti drugih postojećih programa. Ova automatizacija često zahtijeva ponavljanje sličnih operacija nekoliko puta, što je upravo mjesto za petlju dolazi na svoje.
Administratori sustava Linux i Mac obično su upoznati sa skriptiranjem putem terminala, ali to mogu čak i korisnici Windowsa uključite se u akciju s Windows podsustavom za Linux.
Ne trebate koristiti Linux za prebacivanje na drugo računalo ili pokretanje VM-a? Pokrenite Linux u sustavu Windows 10 umjesto terminala Bash shell!
Kako funkcioniraju Bash skripte
Bash skripta je jednostavno obična tekstualna datoteka koja sadrži niz naredbi koje bash ljuska može čitati i izvršavati. Bash je zadana ljuska u MacOS-u prije Cataline i većini Linux distribucija.
Ako nikada prije niste radili sa skriptom ljuske, trebali biste započeti s apsolutno najjednostavnijim slučajem. To će vam omogućiti vježbanje ključnih pojmova, uključujući izradu skripte i njezino izvršavanje.
Prvo stvorite sljedeću datoteku na prikladnom mjestu (idealno je da otvorite terminal i prvo odete do željenog direktorija):
#! / bin / bash
odjek "Hello, World"
Prvi redak govori što god pokreće ovaj program kako ga pokretati (tj. Pomoću bash interpretera). Druga je samo naredba poput bilo koje druge 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 njezina imena, kao u drugom retku.
Ako vidite da se riječi „Hello, World“ pojavljuju ispisane na liniji na vašem terminalu, tada sve funkcionira prema potrebi.
Kako funkcioniraju petlje
U općenitom programiranju, postoje dvije glavne vrste for petlje: brojčani i za svakoga. Numerički tip je tradicionalno najčešći, ali u bashovoj upotrebi obično je obrnuto.
Numerički za petlje obično se fokusiraju na jedan cijeli broj koji određuje koliko će se iteracija izvršiti, na primjer:
za (i = 0; i <100; i ++) {
/ * izjave za višekratno izvršavanje * /
}
Ovo je poznata petlja za petlju koja će se ponoviti točno 100 puta, osim ako se ja ne promijenim unutar petlje ili ako druga naredba zaustavi izvršavanje for petlje.
Za razliku od toga, petlje Foreach imaju tendenciju da rade na strukturama kao što su popisi ili nizovi i ponavljaju se za svaku stavku u toj zbirci:
ljudi = ["Petar", "Pavao", "Marija"]
foreach (ljudi kao osoba) {
if (osoba == "Paul") {
...
}
}
Neki se jezici koriste malo drugačijom sintaksom koja zamjenjuje redoslijed prikupljanja i stavke:
ljudi = ["Petar", "Pavao", "Marija"]
za (osoba u ljudima) {
if (osoba == "Paul") {
...
}
}
Jer u petljama
U bashu, foreach - ili jer u- petlja je češća. Osnovna sintaksa je, jednostavno:
za arg u [popis]
čini
/ * izjave za višekratno izvršavanje * /
/ * vrijednost arg može se dobiti pomoću $ arg * /
gotovo
Na primjer, za iteraciju kroz tri datoteke s eksplicitnim imenom:
za datoteku u jednom.c dva.c tri.c
čini
je li "$ datoteka"
gotovo
Ako takve datoteke postoje u trenutnom direktoriju, izlaz iz ove skripte bit će:
jedan.c
dva.c
tri.c
Umjesto fiksnog skupa datoteka, popis se može dobiti putem glob uzorka (jedan koji uključuje zamjenske znakove - posebne znakove koji predstavljaju ostale znakove). U sljedećem primjeru, petlja for ponavlja sve datoteke (u trenutnom direktoriju) čija imena završavaju na ".xml":
za datoteku u * .xml
čini
ls -l "$ datoteka"
gotovo
Evo nekoliko primjera rezultata:
$ -rw-r - r-- 1 osoblje bobbyja 2436 3. studenoga 2019. feed.xml
$ -rw-r - r-- 1 bobby osoblje 6447 27. listopada 16:24 sitemap.xml
Ovo može izgledati vrlo dugotrajno:
$ ls -l * .xml
Ali postoji značajna razlika: for petlja izvršava ls program dva puta, s jednim imenom datoteke koji mu se svaki put prosljeđuje. U zasebnom primjeru ls, glob obrazac (* .xml) prvo podudara imena datoteka, a zatim ih sve šalje, kao pojedinačne parametre naredbenog retka, na jednu instancu ls.
Evo primjera koji koristi zahod program (brojanje riječi) kako bi razlika bila očitija:
$ wc -l * .xml
44 feed.xml
231 karta web stranice.xml
Ukupno 275
The zahod program broji broj redaka u svakoj datoteci zasebno, a zatim ispisuje ukupan broj na sve njih. Nasuprot tome, ako zahod djeluje unutar for petlje:
za datoteku u * .xml
čini
wc -l $ datoteka
gotovo
I dalje ćete vidjeti broj za svaku datoteku:
44 feed.xml
231 karta web stranice.xml
Ali ne postoji ukupni sažetak, jer zahod se izvodi izolirano, svaki put kad se petlja ponovi.
Kada popis nije popis
Postoji vrlo laka i česta pogreška kada se radi s petljama zbog načina na koji bash obrađuje citirane argumente / nizove. Prelistavanje popisa datoteka trebalo bi se izvršiti ovako:
za datoteku u jednom.c dva.c
Ne ovako:
za datoteku u "one.c two.c"
Drugi primjer obuhvaća imena datoteka u dvostrukim navodnicima što rezultira popisom sa samo jednim parametrom; petlja for izvršit će se samo jednom. Ovaj se problem može izbjeći korištenjem varijable u sljedećim slučajevima:
DATOTEKE = "one.c two.c"
za datoteku u $ FILES
čini
...
gotovo
Imajte na umu da sama deklaracija varijable svoju vrijednost mora priložiti u dvostruke navodnike!
Za bez popisa
Bez ičega za ponavljanje, for petlja djeluje na bilo koje argumente naredbenog retka koji su skripti dostavljeni kad je pozvan. Na primjer, ako imate skriptu s imenom args.sh koji sadrži sljedeće:
#! / bin / sh
za
čini
odjek $ a
gotovo
Tada će vam izvršavanje args.sh dati sljedeće:
$ ./args.sh jedan dva tri
jedan
dva
tri
Bash prepozna ovaj slučaj i liječi za napraviti kao ekvivalent za in $ @ do gdje je $ @ posebna varijabla koja predstavlja argumente naredbenog retka.
Oponašanje tradicionalne numeričke for Loop
Bash skripte često se bave popisima datoteka ili linijama izlaza iz drugih naredbi, tako da je uobičajena petlja for in. Međutim, tradicionalna operacija u stilu c i dalje je podržana:
za ((i = 1; i <= 5; i ++))
čini
odjek $ i
gotovo
Ovo je klasični oblik s tri dijela u kojima:
- varijabla se inicijalizira (i = 1) pri prvom susretu s petljom
- petlja se nastavlja sve dok je uvjet (i <= 5) istinit
- svaki put oko petlje varijabla se uvećava (i ++)
Iteracija između dviju vrijednosti dovoljno je čest zahtjev da postoji kraća, malo manje zbunjujuća alternativa:
za ja u {1..5}
čini
odjek $ i
gotovo
Ekspanzija zagrade koja se odvija učinkovito prevodi gore navedenu petlju for u:
jer ja u 1 2 3 4
Finija kontrola petlje s prekidom i nastavite
Složeniji za petlje često trebaju način ranog izlaska ili odmah ponovno pokretanje glavne petlje sa sljedećom vrijednošću zauzvrat. Da bi to učinio, bash posuđuje stavke 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
za datoteku u *
čini
ako [! -f "$ datoteka"]
zatim
echo "$ datoteka nije datoteka"
nastaviti
fi
num_chars = $ (wc -c echo $ datoteka sadrži "$ num_chars znakova"
ako [$ num_chars -gt 100]
zatim
echo "Pronađena $ datoteka"
pauza
fi
gotovo
Ovdje petlja for djeluje na svim datotekama u trenutnom direktoriju. Ako datoteka nije uobičajena datoteka (npr. Ako je direktorij), naredba continue koristi se za ponovno pokretanje petlje sa sljedećom datotekom zauzvrat. Ako je to uobičajena datoteka, drugi uvjetni blok odredit će sadrži li više od 100 znakova. Ako je to slučaj, izjava break koristi se za trenutno napuštanje petlje for (i dostizanje kraja skripte).
Zaključak
Bash skripta je datoteka koja sadrži niz uputa koje se mogu izvršiti. Petlja for omogućuje ponavljanje dijela skripte više puta. Korištenjem varijabli, vanjskih naredbi i izraza break and continue, bash skripte mogu primijeniti složeniju logiku i izvršavati širok raspon zadataka.
Izvještaj sugerira da Appleove oznake privatnosti aplikacija mogu imati nekih problema.
- Programiranje
- Linux
Bobby je tehnološki entuzijast koji je većinu dva desetljeća radio kao programer softvera. Zaljubljen je u igre, radeći kao urednik recenzija u časopisu Switch Player, i uživan je u svim aspektima internetskog izdavanja i web razvoja.
Pretplatite se na naše obavijesti
Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!
Još jedan korak…!
Potvrdite svoju e-adresu u e-pošti koju smo vam upravo poslali.