Navodila za začetnike za skriptiranje Shell Osnove
Izraz »shell scripting« se pogosto omenja v forumih Linuxa, vendar ga mnogi uporabniki ne poznajo. Učenje tega preprostega in zmogljivega načina programiranja vam lahko pomaga prihraniti čas, bolje se naučiti ukazne vrstice in odpraviti zahtevne naloge upravljanja datotek.
Kaj je skriptni skript?
Uporabnik Linuxa pomeni, da se igrate z ukazno vrstico. Všeč ali ne, obstajajo le nekatere stvari, ki se s tem vmesnikom naredijo veliko lažje kot s kazanjem in klikom. Bolj ko uporabljate ukazno vrstico in jo učite, bolj boste videli njen potencial. No, sama ukazna vrstica je program: lupina. Večina Linuxovih distribucij danes uporablja Bash, in to je tisto, kar resnično vnašate v ukaze.
Nekateri od vas, ki ste uporabljali Windows pred uporabo Linuxa, se lahko spomnijo paketnih datotek. To so bile majhne besedilne datoteke, ki bi jih lahko zapolnili z ukazi, ki jih želite izvesti, in Windows jih je vodil po vrsti. To je bil pameten in čeden način, da bi dobili nekaj stvari narediti, kot teči igre v vašem računalniku srednji šoli, ko niste mogli odpreti sistemske mape ali ustvariti bližnjice. Paketne datoteke v operacijskem sistemu Windows, čeprav so koristne, so poceni posnemanje skriptov ukazne lupine.
Skripti lupine nam omogočajo, da programiramo ukaze v verigah in da jih sistem izvede kot skriptni dogodek, tako kot paketne datoteke. Omogočajo tudi veliko bolj uporabne funkcije, kot je zamenjava ukazov. Ukaz lahko pokličete, kot je datum, in ga uporabite kot del sheme poimenovanja datotek. Avtomatizirate lahko varnostne kopije in vsaka kopirana datoteka lahko ima trenutni datum pripeto na konec svojega imena. Tudi skripti niso samo klici ukazov. Programi so sami po sebi. Scripting vam omogoča uporabo programskih funkcij - kot so 'za' zanke, if / then / else stavke in tako naprej - neposredno v vmesniku vašega operacijskega sistema. In ni vam treba učiti drugega jezika, ker uporabljate tisto, kar že veste: ukazna vrstica.
To je res moč pisanja, mislim. Dobite program z ukazi, ki jih že poznate, medtem ko učite sponke večine glavnih programskih jezikov. Morate narediti nekaj ponavljajočega in dolgočasnega? Napiši ga! Potrebujete bližnjico za res zapleten ukaz? Napiši ga! Želite zgraditi resnično enostaven za uporabo vmesnika ukazne vrstice za nekaj? Napiši ga!
Preden začneš
Preden začnemo s skriptnimi serijami, pokrijemo nekaj osnovnih informacij. Uporabili bomo lupino bash, ki jo uporablja večina distribucij Linuxa. Bash je na voljo tudi za uporabnike Mac OS in Cygwin v operacijskem sistemu Windows. Ker je tako univerzalna, bi morali imeti možnost skripta, ne glede na vašo platformo. Poleg tega, dokler obstajajo vsi ukazi, ki se sklicujejo, lahko skripti delujejo na več platformah z malo ali nič spreminjanja..
Skripti lahko preprosto uporabijo privilegije »administratorja« ali »superuporabnika«, zato je najbolje, da preizkusite skripte, preden jih uporabite. Uporabite tudi zdravo pamet, kot da ste prepričani, da imate varnostne kopije datotek, na katerih boste zagnali skript. Prav tako je zelo pomembno, da uporabite prave možnosti, kot je -i za ukaz rm, tako da je vaša interakcija potrebna. To lahko prepreči nekaj grdih napak. Kot tak, preberite skripte, ki jih prenesete, in bodite previdni pri podatkih, ki jih imate, samo v primeru, da gre kaj narobe.
V svojem jedru so skripti le navadne besedilne datoteke. Za pisanje lahko uporabite kateri koli urejevalnik besedil: gedit, emacs, vim, nano… Ta seznam se nadaljuje. Samo shranite ga kot navadno besedilo, ne kot obogateno besedilo ali Wordov dokument. Ker mi je všeč enostavnost uporabe, ki jo ponuja nano, jo bom uporabljal.
Dovoljenja skripta in imena
Skripte se izvajajo kot programi, in da bi se to zgodilo, morajo imeti ustrezna dovoljenja. Skripte lahko izvedete tako, da zaženete naslednji ukaz:
chmod + x ~ / somecrazyfolder / script1
To bo omogočilo vsakomur, da zažene ta skript. Če želite omejiti njegovo uporabo le na uporabnika, ga lahko uporabite:
chmod u + x ~ / somecrazyfolder / script1
Če želite zagnati ta skript, morate vnesti ustrezno mapo in nato zagnati skript tako:
cd ~ / somecrazyfolder
./ script1
Da bi stvari postale bolj priročne, lahko skripte postavite v mapo »bin« v domačem imeniku:
~ / bin
V mnogih sodobnih distribucijah ta mapa ni več ustvarjena privzeto, lahko pa jo ustvarite. To je običajno, kjer so shranjene izvedljive datoteke, ki pripadajo vašemu uporabniku in ne drugim uporabnikom. Z namestitvijo skriptov jih lahko preprosto zaženete tako, da vtipkate njihovo ime, tako kot drugi ukazi, namesto da bi morali obkrožiti in uporabiti predpono "./"..
Preden poimenujete skript, morate narediti naslednji ukaz, da preverite, ali imate nameščen program, ki uporablja to ime:
ki [ukaz]
Veliko ljudi imenuje svoj zgodnji skript »test«, in ko ga poskusijo zagnati v ukazni vrstici, se nič ne zgodi. To je zato, ker je v nasprotju s testnim ukazom, ki brez argumentov nič ne stori. Vedno se prepričajte, da vaša imena skriptov niso v nasprotju z ukazi, sicer boste morda našli stvari, ki jih ne nameravate storiti!
Smernice za skriptiranje
Kot sem že omenil, je vsaka skriptna datoteka v bistvu golo besedilo. To ne pomeni, da lahko pišete vse, kar želite, vseeno. Ko poskušate izvesti besedilno datoteko, bodo ukazne lupine razčlenjene po njih, da bi ugotovile, ali so skripte ali ne, in kako se z njimi pravilno ravnati. Zaradi tega obstaja nekaj smernic, ki jih morate vedeti.
- Vsak skript bi moral biti z »#! / Bin / bash«
- Vsaka nova vrstica je nov ukaz
- Vrstice komentarjev se začnejo s #
- Ukazi so obkroženi z ()
Hash-Bang Hack
Ko lupina razčleni skozi besedilno datoteko, je najbolj neposreden način za identifikacijo datoteke kot skripta tako, da naredite svojo prvo vrstico:
#! / bin / bash
Če uporabite drugo lupino, jo nadomestite s potjo. Vrstice komentarjev se začnejo z hashes (#), toda dodajanje bang (!) In poti lupine po njem je nekakšen vdor, ki bo obšel pravilo komentarjev in prisilil skript, da se izvede z lupino, na katero kaže ta vrstica.
Nova vrstica = Nova ukazna vrstica
Vsako novo vrstico je treba obravnavati kot nov ukaz ali kot sestavni del večjega sistema. Če bodo stavki / then / else prevzeli več vrstic, bo vsaka komponenta tega sistema v novi vrstici. Ne dovolite, da se ukaz ujame v naslednjo vrstico, saj to lahko obreže prejšnji ukaz in vam da napako v naslednji vrstici. Če vaš urejevalnik besedila to počne, izklopite prelom besedila, da boste na varni strani. Preklapljanje besedila lahko izklopite z nano bitno hitrostjo ALT + L.
Komentar pogosto z oznako #s
Če začnete vrstico s #, se vrstica zanemari. To ga spremeni v vrstico komentarjev, kjer se lahko opomni, kaj je bil izhodni ukaz ali kaj bo naredil naslednji ukaz. Še enkrat izklopite prelom besedila ali prekinite komentar v več vrstic, ki se začnejo z razpršitvijo. Uporaba številnih komentarjev je dobra praksa, saj omogoča, da lahko vi in drugi ljudje lažje prilagodite svoje skripte. Edina izjema je prej omenjeni Hash-Bang hack, zato ne sledite #s z! S. ;-)
Ukazi so obkroženi z oklepaji
V starejših dneh so bile zamenjave ukazov opravljene z enojnimi oznakami (', delijo tipko ~). Tega se še ne bomo dotaknili, toda ker se večina ljudi odpravi in razišče po učenju osnov, je verjetno dobro omeniti, da namesto tega uporabite oklepaje. To je predvsem zato, ker, ko ugnezdite ukaze znotraj drugih ukazov - oklepaji delujejo bolje.
Vaš prvi skript
Začnimo s preprostim skriptom, ki omogoča kopiranje datotek in dodajanje datumov na konec imena datoteke. Recimo, da je »datecp«. Najprej preverite, ali je to ime v nasprotju z nečim:
Vidite lahko, da ni nobenega izhoda tega ukaza, zato smo vsi nastavljeni na to ime.
Ustvarimo prazno datoteko v mapi ~ / bin:
pritisnite ~ / bin / datecp
In zdaj zamenjaj dovoljenje, preden pozabimo:
Začnimo z gradnjo našega scenarija. Odprite datoteko v urejevalniku besedila. Kot sem rekel, mi je všeč preprostost nano.
nano ~ / bin / datecp
In pojdimo naprej in postavimo predpogoj v prvi vrstici in komentar o tem, kaj ta skript počne.
Nato razglasimo spremenljivko. Če ste kdaj vzeli algebro, verjetno veste, kaj je to. Spremenljivka nam omogoča shranjevanje informacij in izvajanje stvari z njo. Spremenljivke se lahko »razširijo«, kadar se sklicujejo drugje. To pomeni, da namesto prikazovanja svojega imena prikažejo shranjeno vsebino. Te iste spremenljivke lahko kasneje poveste, da bodo shranjevale različne informacije, in vsa navodila, ki se pojavijo po tem, bodo uporabila nove informacije. To je res čudovito ogrado.
Kaj bomo spremenili v spremenljivko? No, shranimo datum in čas! Če želite to narediti, pokličemo ukaz za datum.
Oglejte si spodnji posnetek, kako zgraditi izhodni ukaz ukaza:
Vidite lahko, da lahko z dodajanjem različnih spremenljivk, ki se začnejo z%, spremenite izhodni ukaz v tisto, kar želite. Za več informacij si lahko ogledate stran priročnika za ukaz date.
Uporabimo to zadnjo iteracijo ukaza date, „date +% m_% d_% y-% H.% M.% S“ in jo uporabimo v našem skriptu.
Če želimo zdaj shraniti ta skript, ga lahko zaženemo in podamo izhodni ukaz ukaza, kot bi pričakovali:
Ampak, naredimo nekaj drugačnega. Dajmo ime spremenljivke, kot je datum_oblikovan za ta ukaz. Ustrezna sintaksa za to je naslednja:
spremenljivka = $ (argumenti -options argumenti)
In za nas bi jo zgradili tako:
date_formatted = $ (datum +% m_% d_% y-% H.% M.% S)
To imenujemo zamenjava ukazov. Mi v bistvu povemo bash, da vsakič, ko se prikaže spremenljivka "date_formatted", zaženete ukaz znotraj oklepajev. Potem naj se namesto imena spremenljivke prikaže, ne glede na izpis ukazov, »datum_formatirano«..
Tukaj je primer skripta in njegov izhod:
Upoštevajte, da sta v izhodu dva prostora. Prikazan je prostor znotraj narekovajev ukaza echo in prostora pred spremenljivko. Ne uporabljajte prostorov, če jih ne želite prikazati. Upoštevajte tudi, da brez dodane vrstice »odmev« skript ne bi dal nobenega izhoda.
Nazaj na naš scenarij. Naslednje dodamo v kopirni del ukaza.
cp -iv $ 1 $ 2. $ date_formatted
To bo zahtevalo ukaz za kopiranje z možnostmi -i in -v. Prvo vas bo prosilo za preverjanje, preden boste prepisali datoteko, slednje pa bo prikazalo, kaj je v ukazni vrstici.
Nato lahko vidite, da sem dodal možnost »$ 1«. Ko skriptiranje, bo znak za dolar ($), ki mu sledi številka, označil ta oštevilčen argument skripta, ko je bil priklican. Na primer v naslednjem ukazu:
cp -iv Trogdor2.mp3 ringtone.mp3
Prvi argument je »Trogdor2.mp3« in drugi argument »ringtone.mp3«.
Če pogledamo nazaj na naš scenarij, vidimo, da se sklicujemo na dva argumenta:
To pomeni, da bomo morali pri zagonu skripta podati dva argumenta za pravilno izvajanje skripta. Prvi argument, $ 1, je datoteka, ki bo kopirana in je zamenjana kot prvi argument ukaza "cp -iv".
Drugi argument, $ 2, bo deloval kot izhodna datoteka za isti ukaz. Lahko pa tudi vidite, da je drugače. Dodali smo obdobje in navedli smo spremenljivko »date_formatted« od zgoraj. Zanima me, kaj to počne?
To se zgodi, ko se izvaja skript:
Vidite lahko, da je izhodna datoteka navedena kot karkoli sem vnesel za $ 2, ki ji sledi obdobje, nato izhodni ukaz za datum! Ima smisel, prav?
Zdaj, ko zaženem ukaz datecp, bo zagnal ta skript in mi dovolil, da kopiram katerokoli datoteko na novo lokacijo in samodejno dodam datum in čas do konca imena datoteke. Uporabno za arhiviranje stvari!
Shell skriptiranje je v srcu, da vaš OS deluje za vas. Ni vam treba učiti novega programskega jezika, da bi se to zgodilo. Poskusite skriptiranje z nekaj osnovnimi ukazi doma in začnite razmišljati o tem, za kaj lahko to uporabite.
Ali imate scenarij? Imate kakšen nasvet za začetnike? Delite svoje misli v komentarjih! V tej seriji je še nekaj!