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.

Kako nabaviti Linux Bash Shell na sustavu Windows 10

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.

instagram viewer

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:

  1. varijabla se inicijalizira (i = 1) pri prvom susretu s petljom
  2. petlja se nastavlja sve dok je uvjet (i <= 5) istinit
  3. 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.

E-mail
Oznake privatnosti Appleovih aplikacija možda neće biti potpuno točne

Izvještaj sugerira da Appleove oznake privatnosti aplikacija mogu imati nekih problema.

Povezane teme
  • Programiranje
  • Linux
O autoru
Bobby Jack (Objavljeno 19 članaka)

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.

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!

Još jedan korak…!

Potvrdite svoju e-adresu u e-pošti koju smo vam upravo poslali.

.