Bashi skriptid on ülitõhus viis ülesannete automatiseerimiseks, eriti nende jaoks, mis kasutavad ära teisi olemasolevaid programme. See automatiseerimine nõuab sageli sarnase toimingu kordamist mitu korda, just seal silmuse jaoks tuleb omaette.

Linuxi ja Maci süsteemiadministraatorid tunnevad tavaliselt terminali kaudu skriptimist, kuid isegi Windowsi kasutajad saavad seda teha saada osa operatsioonist Windowsi allsüsteemiga Linuxile.

Kuidas saada Windows 10-sse Linux Bash Shelli

Kas peate arvutit vahetama või VM-i käitama, pole Linuxi aega kasutada? Käivitage Linux Windows 10-s hoopis Bashi shelliterminaliga!

Kuidas Bashi skriptid töötavad

Bashi skript on lihtsalt tavaline tekstifail, mis sisaldab rida käske, mida bashi kest saab lugeda ja täita. Bash on Catalina-eelse macOS-i ja enamiku Linuxi distributsioonide vaikekest.

Kui te pole kunagi varem shelliskriptiga töötanud, peaksite alustama absoluutse lihtsa juhtumiga. See võimaldab teil harjutada põhimõisteid, sealhulgas skripti loomist ja selle käivitamist.

instagram viewer

Kõigepealt looge järgmine fail mugavas kohas (ideaaljuhul avage terminal ja navigeerige kõigepealt soovitud kataloogi):

#! / bin / bash
kaja "Tere, maailm"

Esimene rida annab teada, kuidas see programm töötab (st kasutades bashi tõlki). Teine on lihtsalt käsk nagu iga teine, mille võite käsureale sisestada. Salvestage see fail nimega tere_maailm.sh, siis:

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

The chmod Esimese rea käsk muudab faili käivitatavaks, see tähendab, et seda saab käivitada selle nime tippimisega, nagu teisel real.

Kui näete, et terminali reale ilmub trükitud sõna „Tere, maailm”, töötab kõik nõutult.

Kuidas aasad toimivad

Üldiselt on loopil kaks peamist tüüpi: numbriline ja igaühele. Numbriline tüüp on traditsiooniliselt kõige tavalisem, kuid bashi kasutuses on see tavaliselt vastupidi.

Silmuste numbriline arv keskendub tavaliselt ühele täisarvule, mis määrab mitu kordust, näiteks:

jaoks (i = 0; i <100; i ++) {
/ * korduvalt täidetavad avaldused * /
}

See on tuttava välimusega silmus, mis kordub täpselt 100 korda, välja arvatud juhul, kui i muudetakse tsüklis või kui mõni teine ​​lause põhjustab for loopi täitmise peatumise.

Foreachi silmused seevastu kipuvad töötama struktuurides, nagu loendid või massiivid, ja kordama iga selle kollektsiooni üksust:

inimesed = ["Peetrus", "Paulus", "Maarja"]
foreach (inimesed kui inimene) {
kui (isik == "Paulus") {
...
}
}

Mõnes keeles kasutatakse pisut erinevat süntaksit, mis vahetab kogu ja järjestuse järjestuse:

inimesed = ["Peetrus", "Paulus", "Maarja"]
for (inimene inimestes) {
kui (isik == "Paulus") {
...
}
}

Sest aasades

Bashis, foreach - või aastal sisse—Loop on tavalisem. Põhiline süntaks on lihtsalt:

arg jaoks [loendis]
tegema
/ * korduvalt täidetavad avaldused * /
/ * arg väärtuse saab kasutada, kasutades $ arg * /
tehtud

Näiteks kolme selgesõnalise nimega faili kordamiseks:

faili jaoks üks.c kaks. c kolm. c
tegema
ls "$ file"
tehtud

Kui sellised failid on praeguses kataloogis olemas, on selle skripti väljund:

üks. c
kaks. c
kolm. c

Fikseeritud failikomplekti asemel saab loendi hankida glob-mustri abil (üks sisaldab metamärke - erimärke, mis tähistavad teisi märke). Järgmises näites kordab for loop kõik failid (praeguses kataloogis), mille nimed lõpevad ".xml":

faili jaoks * .xml
tegema
ls -l "$ fail"
tehtud

Siin on näite väljund:

$ -rw-r - r-- 1 bobby personal 2436 3. november 2019 feed.xml
$ -rw-r - r-- 1 bobitöötaja 6447 27. oktoober 16:24 sitemap.xml

See võib tunduda väga pikaajaline viis:

$ ls -l * .xml

Kuid seal on oluline erinevus: for loop täidab ls programmeerige 2 eraldi korda, iga kord edastatakse talle üks failinimi. Eraldi näites ls sobitab glob muster (* .xml) kõigepealt failinimed ja saadab need kõik üksikute käsurea parameetritena ühele ls.

Siin on näide, mis kasutab tualett (sõnade loendamise) programm, et muuta erinevus ilmsemaks:

$ wc -l * .xml
44 feed.xml
231 saidikaart.xml
Kokku 275

The tualett programm loeb ridade arvu igas failis eraldi, seejärel prindib kõigi nende ridade koguarvu. Seevastu, kui tualett töötab for-loopi piires:

faili jaoks * .xml
tegema
wc -l $ fail
tehtud

Näete endiselt iga faili arvu:

44 feed.xml
231 saidikaart.xml

Kuid üldist kokkuvõtet pole, sest tualett käivitatakse eraldi, iga kord, kui silmus kordub.

Kui loend pole loend

Silmuste käsitlemisel on väga lihtne ja tavaline viga, mis tuleneb viisist, kuidas bash käsitleb tsiteeritud argumente / stringe. Failide loendi sirvimine peaks toimuma järgmiselt:

faili jaoks üks.c kaks.c

Mitte niimoodi:

faili jaoks failis "one.c two.c"

Teine näide hõlmab failinimesid jutumärkides, mille tulemuseks on loend, millel on ainult üks parameeter; for loop käivitub ainult üks kord. Seda probleemi saab vältida muutuja kasutamisega järgmistel juhtudel:

FILES = "üks.c kaks.c"
faili jaoks failis $ FILES
tegema
...
tehtud

Pange tähele, et muutujadeklaratsioon ise peab lisama selle väärtuse jutumärkidesse!

Sest ilma nimekirjata

Kuna midagi pole võimalik läbi korrata, töötab for silmus mis tahes käsurea argumentidega, mis skriptile esitati, kui neid kutsuti. Näiteks kui teil on nimega skript args.sh mis sisaldab järgmist:

#! / bin / sh
le
tegema
kaja $ a
tehtud

Seejärel annab args.sh käivitamine järgmise:

$ ./args.sh üks kaks kolm
üks
kaks
kolm

Bash tunneb selle juhtumi ära ja kohtleb tegemiseks samaväärsena teenuse $ @ do jaoks kus $ @ on spetsiaalne muutuja, mis tähistab käsurea argumente.

Loopi jaoks traditsioonilise numbri jäljendamine

Bash-skriptid käsitlevad sageli failide loendeid või muude käskude väljundiridasid, nii et silmus for in on tavaline. Siiski toetatakse endiselt traditsioonilist c-stiilis toimingut:

for ((i = 1; i <= 5; i ++))
tegema
kaja $ i
tehtud

See on kolmeosaline klassikaline vorm, milles:

  1. muutuja initsialiseeritakse (i = 1), kui silmus esimest korda kokku puutub
  2. silmus jätkub seni, kuni tingimus (i <= 5) on tõene
  3. iga kord ringjoone jooksul suurendatakse muutujat (i ++)

Kahe väärtuse vahel kordamine on piisavalt tavaline nõue, et on olemas lühem, veidi vähem segane alternatiiv:

i jaoks ajavahemikus {1..5}
tegema
kaja $ i
tehtud

Toimuv trakside laiendamine teisendab ülaltoodud silmuse jaoks järgmiselt:

i jaoks 1 2 3 4

Peenema silmuse juhtimine koos katkestuse ja jätkamisega

Silmuste jaoks keerukamad vajavad sageli viisi varakult väljumiseks või peatsilmi taaskäivitamiseks järgmise väärtusega. Selleks laenab bash pausi ja jätkab teistes programmeerimiskeeltes levinud väiteid. Siin on näide, mis kasutab mõlemat esimese enam kui 100 tähemärgi pikkuse faili leidmiseks.

#! / bin / bash
faili jaoks *
tegema
kui [! -f "$ fail"]
siis
echo "$ fail pole fail"
jätkata
fi
num_chars = $ (wc -c echo $ fail on "$ num_chars tähemärki pikk"
kui [$ num_chars -gt 100]
siis
kaja "Leitud $ fail"
murda
fi
tehtud

Siinne for loop töötab kõigi praeguse kataloogi failidega. Kui fail ei ole tavaline fail (nt kui see on kataloog), kasutatakse jätkamise lauset tsükli taaskäivitamiseks järgmise failiga. Kui see on tavaline fail, määrab teine ​​tingimuslik plokk, kas see sisaldab rohkem kui 100 tähemärki. Kui jah, kasutatakse break-lauset for-silmusest kohe lahkumiseks (ja skripti lõppu jõudmiseks).

Järeldus

Bashi skript on fail, mis sisaldab käskude komplekti, mida saab käivitada. A for loop võimaldab skripti osa korrata mitu korda. Muutujate, väliste käskude ning katkestamise ja jätkamise lausete abil saavad bashi skriptid rakendada keerukamat loogikat ja täita paljusid ülesandeid.

E-post
Apple'i rakenduse privaatsussildid ei pruugi olla täiesti täpsed

Aruanne viitab sellele, et Apple'i rakenduse privaatsussiltidel võib olla probleeme.

Seotud teemad
  • Programmeerimine
  • Linux
Autori kohta
Bobby Jack (Avaldatud 19 artiklit)

Bobby on tehnoloogiaentusiast, kes töötas tarkvaraarendajana peaaegu kaks aastakümmet. Ta on mängude vastu kirglik, töötab Switch Player Magazine'is arvustuste toimetajana ning on süvenenud veebiväljaannete ja veebiarenduse kõigisse aspektidesse.

Veel Bobby Jackilt

Telli meie uudiskiri

Liituge meie uudiskirjaga, kus leiate tehnilisi näpunäiteid, ülevaateid, tasuta e-raamatuid ja eksklusiivseid pakkumisi!

Veel üks samm !!!

Palun kinnitage oma e-posti aadress meilis, mille me just saatsime.

.