„Bash“ scenarijai yra labai efektyvi užduočių automatizavimo priemonė, ypač tų, kurios naudojasi kitomis esamomis programomis. Šiai automatikai dažnai reikia kelis kartus pakartoti panašią operaciją, būtent tai ir yra už kilpą ateina į savo.

„Linux“ ir „Mac“ sistemų administratoriai paprastai žino scenarijų naudojimą per terminalą, tačiau netgi „Windows“ vartotojai gali įsitraukite į veiksmą naudodami „Windows“ posistemį, skirtą „Linux“.

Kaip gauti „Linux Bash Shell“ sistemoje „Windows 10“

Ar nereikia naudoti „Linux“, kad būtų galima pereiti prie kito kompiuterio ar paleisti VM? Paleiskite „Linux“ sistemoje „Windows 10“ su „Bash shell“ terminalu!

Kaip veikia „Bash“ scenarijai

„Bash“ scenarijus yra tiesiog paprasto teksto failas, kuriame yra daugybė komandų, kurias „bash“ apvalkalas gali perskaityti ir vykdyti. „Bash“ yra numatytasis apvalkalas „pre-Catalina macOS“ ir daugumoje „Linux“ paskirstymų.

Jei dar niekada nedirbote su apvalkalo scenarijumi, turėtumėte pradėti nuo paprasčiausio atvejo. Tai leis jums praktikuoti pagrindines sąvokas, įskaitant scenarijaus kūrimą ir jo vykdymą.

instagram viewer

Pirmiausia sukurkite šį failą patogioje vietoje (idealiu atveju atidarykite terminalą ir pirmiausia eikite į norimą katalogą):

#! / bin / bash
aidas „Sveikas, pasauli“

Pirmoje eilutėje nurodoma, kaip veikia ši programa, t. Y. Naudojant bash vertėją. Antroji yra tik tokia komanda, kurią galite įvesti komandinėje eilutėje. Išsaugokite failą kaip labas_pasaulis.sh, tada:

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

chmod pirmoje eilutėje esanti komanda daro failą vykdomą, o tai reiškia, kad jį galima paleisti įvedant jo pavadinimą, kaip ir antroje eilutėje.

Jei matote, kad žodžiai „Sveiki, pasauli“ pasirodo atspausdinti ant jūsų terminalo linijos, viskas veikia kaip reikalaujama.

Kaip veikia kilpos

Paprastai programuojant yra du pagrindiniai ciklo tipai: skaitinis ir kiekvienam. Skaitmeninis tipas tradiciškai yra labiausiai paplitęs, tačiau, vartojant bash, dažniausiai būna atvirkščiai.

Kilpų skaitinė reikšmė paprastai sutelkiama į vieną skaičių, kuris nustato, kiek kartojimų bus atlikta, pavyzdžiui:

už (i = 0; i <100; i ++) {
/ * pakartotinai vykdomi teiginiai * /
}

Tai yra gerai pažįstama kilpa, kuri kartosis tiksliai 100 kartų, nebent aš pakeisiu ciklą, ar kitas sakinys sustabdys „for loop“ vykdymą.

„Foreach“ kilpos, priešingai, paprastai veikia tokias struktūras kaip sąrašai ar masyvai, ir kartojasi kiekvieną tos kolekcijos elementą:

žmonės = ["Petras", "Paulius", "Marija"]
foreach (žmonės kaip asmuo) {
jei (asmuo == "Paulius") {
...
}
}

Kai kuriose kalbose naudojama šiek tiek kitokia sintaksė, kuri keičia kolekcijos ir daiktų tvarką:

žmonės = ["Petras", "Paulius", "Marija"]
skirta (asmeniui žmonėse) {
jei (asmuo == "Paulius") {
...
}
}

Nes „Loops“

Baše foreachas - arba —Plakas yra dažnesnis. Pagrindinė sintaksė yra tokia:

už arg [sąraše]
padaryti
/ * pakartotinai vykdomi teiginiai * /
/ * arg reikšmę galima gauti naudojant $ arg * /
padaryta

Pavyzdžiui, pakartoti tris aiškiai įvardytus failus:

failui one.c two.c three.c
padaryti
ls „$ file“
padaryta

Jei tokių failų yra dabartiniame kataloge, šio scenarijaus išvestis bus:

vienas.c
du.c
trys. c

Vietoj fiksuoto failų rinkinio sąrašą galima gauti naudojant globinį šabloną (vieną, kuriame yra pakaitos - specialieji simboliai, žymintys kitus simbolius). Šiame pavyzdyje „for loop“ kartoja visus failus (dabartiniame kataloge), kurių vardai baigiasi „.xml“:

failui * .xml
padaryti
ls -l "$ byla"
padaryta

Štai keletas išvesties pavyzdžių:

$ -rw-r - r-- 1 bobby personalas 2436 2019 m. lapkričio 3 d. feed.xml
$ -rw-r - r-- 1 „Bobby“ personalas 6447 spalio 27 d. 16:24 sitemap.xml

Tai gali atrodyti kaip ilgai trunkantis būdas:

$ ls -l * .xml

Tačiau yra didelis skirtumas: „for loop“ vykdo ls programa 2 atskirus kartus, kiekvieną kartą perduodant vieną failo pavadinimą. Atskirame „ls“ pavyzdyje „Glob“ šablonas (* .xml) pirmiausia sutampa su failų pavadinimais ir tada visus juos, kaip atskirus komandinės eilutės parametrus, siunčia į vieną ls.

Štai pavyzdys, kuriame naudojamas wc (žodžių skaičiavimo) programa, kad skirtumas būtų akivaizdesnis:

$ wc -l * .xml
44 feed.xml
231 svetainės žemėlapis.xml
Iš viso 275

wc programa skaičiuoja eilučių skaičių kiekviename faile atskirai, tada atspausdina bendrą jų skaičių. Priešingai, jei wc veikia per „loop“:

failui * .xml
padaryti
wc -l $ failas
padaryta

Vis tiek matysite kiekvieno failo skaičių:

44 feed.xml
231 svetainės žemėlapis.xml

Tačiau bendros sumos nėra, nes wc yra vykdomas atskirai, kiekvieną kartą kartojant ciklą.

Kai sąrašas nėra sąrašas

Yra labai lengva ir dažna klaida dirbant su kilpomis, dėl to, kaip bashas elgiasi su cituotais argumentais / eilutėmis. Peržiūrėkite failų sąrašą taip:

failui one.c two.c

Ne taip:

failui „one.c two.c“

Antrame pavyzdyje failų pavadinimai pateikiami dvigubose kabutėse, todėl pateikiamas tik vieno parametro sąrašas; for ciklas bus vykdomas tik vieną kartą. Šios problemos galima išvengti naudojant kintamąjį tokiais atvejais:

FILES = "one.c two.c"
failui iš $ FILES
padaryti
...
padaryta

Atminkite, kad pati kintamojo deklaracija turi pateikti savo vertę dvigubose kabutėse!

Už be sąrašo

Nėra ką kartoti, „for“ ciklas veikia bet kokius komandinės eilutės argumentus, kurie buvo pateikti scenarijui, kai jie buvo iškviečiami. Pvz., Jei turite scenarijų pavadinimu args.sh kuriame yra:

#! / bin / sh
dėl
padaryti
aidas $ a
padaryta

Tada vykdydami args.sh gausite:

$ ./args.sh vienas du trys
vienas
du
trys

Bashas pripažįsta šį atvejį ir gydo už padarymą kaip atitikmuo už $ @ do kur $ @ yra specialus kintamasis, nurodantis komandinės eilutės argumentus.

Imituoja tradicinę skaitmeninę kilpą

„Bash“ scenarijai dažnai nagrinėja failų sąrašus ar kitų komandų išvesties eilutes, todėl „for in“ tipo kilpa yra įprasta. Tačiau tradicinė c stiliaus operacija vis dar palaikoma:

už ((i = 1; i <= 5; i ++))
padaryti
aidas $ i
padaryta

Tai klasikinė forma, kurią sudaro trys dalys:

  1. kintamasis inicijuojamas (i = 1) pirmą kartą susidūrus su kilpa
  2. ciklas tęsiasi tol, kol sąlyga (i <= 5) yra teisinga
  3. kiekvieną kartą aplink ciklą kintamasis yra didinamas (i ++)

Dviejų verčių kartojimas yra pakankamai įprastas reikalavimas, kad būtų trumpesnė, šiek tiek mažiau paini alternatyva:

man i {1..5}
padaryti
aidas $ i
padaryta

Vykstantis petnešų išplėtimas veiksmingai paverčia aukščiau nurodytą kilpą į:

už i i 1 2 3 4

Geresnis kontūro valdymas su pertrauka ir toliau

Sudėtingesnėms kilpoms dažnai reikia išeiti iš ankstyvo laiko arba nedelsiant iš naujo paleisti pagrindinę liniją su kita paeiliui. Norėdami tai padaryti, bash skolinasi pertrauką ir tęskite teiginius, kurie yra įprasti kitose programavimo kalbose. Pateikiame pavyzdį, kuris naudoja abu ieškant pirmo failo, kurio ilgis yra daugiau nei 100 simbolių:

#! / bin / bash
failui *
padaryti
jei [! -f "$ failas"]
tada
echo "$ failas nėra failas"
Tęsti
fi
num_chars = $ (wc -c „echo $“ failas yra „$ num_chars simbolių ilgio“
jei [$ num_chars -gt 100]
tada
aidas „Rastas $ failas“
pertrauka
fi
padaryta

Čia „for loop“ veikia visus failus dabartiniame kataloge. Jei failas nėra įprastas failas (pvz., Jei tai yra katalogas), tęsinys yra naudojamas norint paleisti kilpą iš eilės su kitu failu. Jei tai įprastas failas, antrasis sąlyginis blokas nustatys, ar jame yra daugiau nei 100 simbolių. Jei taip, lūžio sakinys naudojamas nedelsiant palikti for ciklą (ir pasiekti scenarijaus pabaigą).

Išvada

„Bash“ scenarijus yra failas, kuriame yra nurodymų, kuriuos galima vykdyti, rinkinys. „A for loop“ leidžia scenarijaus dalį pakartoti daug kartų. Naudojant kintamuosius, išorines komandas ir pertraukimo bei tęsimo sakinius, „bash“ scenarijai gali taikyti sudėtingesnę logiką ir atlikti įvairiausias užduotis.

El
„Apple“ programų privatumo etiketės gali būti visiškai netikslios

Ataskaitoje teigiama, kad „Apple“ programų privatumo etiketėse gali kilti tam tikrų problemų.

Susijusios temos
  • Programavimas
  • „Linux“
Apie autorių
Bobis Džekas (Paskelbta 19 straipsnių)

Bobis yra technologijų entuziastas, kuris beveik du dešimtmečius dirbo programinės įrangos kūrėju. Jis aistringai žaidžia, dirba „Review Player“ žurnalo apžvalgų redaktoriumi ir yra pasinėręs į visus internetinės leidybos ir interneto kūrimo aspektus.

Daugiau iš Bobby Jacko

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kuriame rasite techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Dar vienas žingsnis…!

Prašome patvirtinti savo el. Pašto adresą el. Laiške, kurį jums ką tik išsiuntėme.

.