Bash skripti so zelo učinkovito sredstvo za avtomatizacijo nalog, zlasti tistih, ki izkoriščajo prednosti drugih obstoječih programov. Ta avtomatizacija pogosto zahteva večkratno ponovitev podobnega postopka, kar je ravno v primeru za zanko pride na svoje.
Sistemski skrbniki sistemov Linux in Mac običajno poznajo skriptiranje prek terminala, lahko pa tudi uporabniki sistema Windows vključite se v podsistem Windows za Linux.
Ali potrebujete Linux, da preklopite na drug računalnik ali zaženete VM? Namesto tega zaženite Linux v sistemu Windows 10 s terminalom lupine Bash!
Kako delujejo skripte Bash
Skript bash je preprosto navadna besedilna datoteka, ki vsebuje vrsto ukazov, ki jih lupina bash lahko bere in izvaja. Bash je privzeta lupina v pred-Catalina macOS in večini distribucij Linuxa.
Če še nikoli niste delali s skriptom lupine, morate začeti s povsem preprostim primerom. Tako boste lahko vadili ključne koncepte, vključno z ustvarjanjem skripta in njegovo izvedbo.
Najprej ustvarite naslednjo datoteko na priročnem mestu (v idealnem primeru odprite terminal in se najprej pomaknite do želenega imenika):
#! / bin / bash
odmev "Pozdravljen, svet"
Prva vrstica pove, kako zažene ta program, kako ga zagnati (tj. Z uporabo tolmača bash). Drugi je le ukaz, kot ga lahko vnesete v ukazno vrstico. Datoteko shranite kot hello_world.sh, potem:
$ chmod + x hello_world.sh
$ ./hello_world.sh
The chmod ukaz v prvi vrstici naredi datoteko izvedljivo, kar pomeni, da jo je mogoče zagnati tako, da vtipkate njeno ime, kot v drugi vrstici.
Če vidite, da so na vašem terminalu v vrstici natisnjene besede »Pozdravljeni, svet«, potem vse deluje po potrebi.
Kako delujejo zanke
V splošnem programiranju obstajata dve glavni vrsti zanke: številsko in za vsakogar. Številski tip je tradicionalno najpogostejši, pri uporabi bash pa je običajno obratno.
Številske zanke se običajno osredotočijo na eno celo število, ki določa, koliko ponovitev bo izvedenih, na primer:
za (i = 0; i <100; i ++) {
/ * izjave za večkratno izvajanje * /
}
To je zanka, ki išče zanko, ki se bo ponovila natanko 100-krat, razen če se v zanki spremeni ali če druga izjava povzroči zaustavitev izvajanja zanke for.
Zanke Foreach, nasprotno, ponavadi delujejo na strukturah, kot so seznami ali nizi, in se ponovijo za vsak element v tej zbirki:
ljudje = ["Peter", "Paul", "Mary"]
foreach (ljudje kot oseba) {
če (oseba == "Paul") {
...
}
}
Nekateri jeziki uporabljajo nekoliko drugačno sintakso, ki zamenja vrstni red zbiranja in postavke:
ljudje = ["Peter", "Paul", "Mary"]
za (oseba v ljudeh) {
če (oseba == "Paul") {
...
}
}
Za v zanke
V bash, foreach - oz za v- zanka je pogostejša. Osnovna sintaksa je preprosto:
za arg v [seznam]
naredi
/ * izjave za večkratno izvajanje * /
/ * vrednost arg lahko dobimo s pomočjo $ arg * /
Končano
Na primer za iteracijo skozi tri izrecno imenovane datoteke:
za datoteko v one.c two.c three.c
naredi
ls "$ datoteka"
Končano
Če take datoteke obstajajo v trenutnem imeniku, bo rezultat tega skripta:
ena.c
dva.c
tri.c
Namesto določenega nabora datotek je seznam mogoče dobiti z glob vzorcem (eden vključuje nadomestne znake - posebne znake, ki predstavljajo druge znake). V naslednjem primeru se zanka for ponovi v vseh datotekah (v trenutnem imeniku), katerih imena se končajo z ".xml":
za datoteko v * .xml
naredi
ls -l "$ datoteka"
Končano
Tu je nekaj primerov:
$ -rw-r - r-- 1 bobby osebje 2436 3. november 2019 feed.xml
$ -rw-r - r-- 1 bobby osebje 6447 27. oktober 16:24 sitemap.xml
To lahko izgleda zelo dolgotrajno:
$ ls -l * .xml
Vendar obstaja bistvena razlika: zanka for izvede datoteko ls program ločeno dvakrat, vsakič z enim samim imenom datoteke. V ločenem primeru ls se vzorec glob (* .xml) najprej ujema z imeni datotek, nato pa jih kot posamezne parametre ukazne vrstice pošlje enemu primerku ls.
Tu je primer, ki uporablja stranišče program (štetje besed), da bo razlika bolj očitna:
$ wc -l * .xml
44 feed.xml
231 karta spletnega mesta.xml
Skupaj 275
The stranišče program prešteje število vrstic v vsaki datoteki posebej, nato pa na vse natisne skupno število. Nasprotno pa če stranišče deluje znotraj zanke for:
za datoteko v * .xml
naredi
wc -l $ datoteka
Končano
Število za vsako datoteko bo še vedno prikazano:
44 feed.xml
231 karta spletnega mesta.xml
Vendar ni celotnega povzetka, ker stranišče se izvaja ločeno, vsakič, ko se zanka ponovi.
Ko seznam ni seznam
Pri obravnavanju zank obstaja zelo enostavna in pogosta napaka zaradi načina, kako bash obdeluje citirane argumente / nize. Pregledovanje seznama datotek je treba narediti tako:
za datoteko v one.c two.c
Ne tako:
za datoteko v "one.c two.c"
Drugi primer zajema imena datotek z dvojnimi narekovaji, kar ima za posledico seznam z enim samim parametrom; zanka for se bo izvedla samo enkrat. Tej težavi se je mogoče izogniti z uporabo spremenljivke v takih primerih:
DATOTEKE = "one.c two.c"
za datoteko v $ FILES
naredi
...
Končano
Upoštevajte, da mora sama deklaracija spremenljivke svojo vrednost vključiti v dvojne narekovaje!
Za Brez seznama
Z zanko for, ki bi se ponovila, zanka for deluje na kakršnih koli argumentih ukazne vrstice, ki so bili skriptu posredovani, ko so bili pozvani. Na primer, če imate poimenovan skript args.sh ki vsebuje naslednje:
#! / bin / sh
za
naredi
echo $ a
Končano
Nato vam bo izvajanje args.sh dalo naslednje:
$ ./args.sh ena dva tri
eno
dva
tri
Bash ta primer prepozna in zdravi za narediti kot ekvivalent za $ @ do kjer je $ @ posebna spremenljivka, ki predstavlja argumente ukazne vrstice.
Posnemanje tradicionalne numerične zanke
Bash skripti pogosto obravnavajo sezname datotek ali vrstice izhodnih podatkov drugih ukazov, zato je zanka for in pogosta. Vendar je tradicionalna operacija v slogu c še vedno podprta:
za ((i = 1; i <= 5; i ++))
naredi
echo $ i
Končano
To je klasična oblika s tremi deli, v katerih:
- spremenljivka se inicializira (i = 1) ob prvem srečanju z zanko
- zanka se nadaljuje, dokler je pogoj (i <= 5) resničen
- vsakič okoli zanke se spremenljivka poveča (i ++)
Ponavljanje med dvema vrednostma je dovolj pogosta zahteva, da obstaja krajša, nekoliko manj zmedena alternativa:
za i v {1..5}
naredi
echo $ i
Končano
Razširitev oklepaja, ki se zgodi, učinkovito prevede zgornjo zanko for v:
za i v 1 2 3 4
Finer Loop Control s prekinitvijo in nadaljevanjem
Bolj zapletene zanke pogosto potrebujejo način zgodnjega izstopa ali takojšen ponovni zagon glavne zanke z naslednjo vrednostjo. Da bi to naredil, si bas izposodi odmori in nadaljevanje stavkov, ki so pogosti v drugih programskih jezikih. Tu je primer, ki uporablja oba za iskanje prve datoteke, ki je daljša od 100 znakov:
#! / bin / bash
za datoteko v *
naredi
če [! -f "$ datoteka"]
potem
echo "$ datoteka ni datoteka"
nadaljujte
fi
num_chars = $ (wc -c datoteka echo $ je "dolga $ num_chars znakov"
če [$ num_chars -gt 100]
potem
echo "Najdena $ datoteka"
odmor
fi
Končano
Zanka for tukaj deluje na vseh datotekah v trenutnem imeniku. Če datoteka ni običajna datoteka (npr. Če gre za imenik), se izjava continue uporabi za ponovni zagon zanke z naslednjo datoteko po vrsti. Če gre za običajno datoteko, bo drugi pogojni blok določil, ali vsebuje več kot 100 znakov. V tem primeru se izjava break uporabi za takojšnjo zapustitev zanke for (in doseganje konca skripta).
Zaključek
Skript bash je datoteka, ki vsebuje niz navodil, ki jih je mogoče izvesti. Zanka for omogoča, da se del skripta ponovi večkrat. Z uporabo spremenljivk, zunanjih ukazov in stavkov break in continue lahko bash skripti uporabljajo bolj zapleteno logiko in izvajajo širok spekter nalog.
Poročilo nakazuje, da imajo Appleove oznake zasebnosti aplikacij lahko nekaj težav.
- Programiranje
- Linux

Bobby je tehnološki navdušenec, ki je več kot dve desetletji delal kot razvijalec programske opreme. Navdušen je nad igranjem iger, dela kot urednik mnenj pri reviji Switch Player in je poglobljen v vse vidike spletnega založništva in spletnega razvoja.
Naročite se na naše novice
Pridružite se našemu glasilu za tehnične nasvete, preglede, brezplačne e-knjige in ekskluzivne ponudbe!
Še en korak…!
Potrdite svoj e-poštni naslov v e-poštnem sporočilu, ki smo vam ga pravkar poslali.