Začetnikov priročnik za skriptno skripto: osnove

Kazalo:

Video: Začetnikov priročnik za skriptno skripto: osnove

Video: Začetnikov priročnik za skriptno skripto: osnove
Video: КРЕМЕНЬ. ОСВОБОЖДЕНИЕ - Боевик / Все серии подряд 2024, Marec
Začetnikov priročnik za skriptno skripto: osnove
Začetnikov priročnik za skriptno skripto: osnove
Anonim
Izraz "shell scripting" se pogosto omenja v forumih Linuxa, vendar mnogi uporabniki tega niso seznanjeni. Učenje te preproste in zmogljive metode programiranja vam lahko pomaga prihraniti čas, bolje se naučiti ukazne vrstice in izločiti mučne naloge upravljanja datotek.
Izraz "shell scripting" se pogosto omenja v forumih Linuxa, vendar mnogi uporabniki tega niso seznanjeni. Učenje te preproste in zmogljive metode programiranja vam lahko pomaga prihraniti čas, bolje se naučiti ukazne vrstice in izločiti mučne naloge upravljanja datotek.

Kaj je Shell Scripting?

Biti uporabnik Linux pomeni, da se igrate z ukazno vrstico. Všeč ali ne, obstaja le nekaj stvari, ki so storjene veliko lažje preko tega vmesnika kot s kazanjem in klikom. Bolj ko uporabljate in se naučite ukazne vrstice, bolj vidite svoj potencial. No, ukazna vrstica je program: lupina. Večina distribucij Linuxa danes uporablja Bash, in to je tisto, na kar dejansko vnesete ukaze.

Nekateri izmed vas, ki ste pred operacijskim sistemom Windows uporabljali Windows, morda zapomnijo šaržne datoteke. To so bile majhne besedilne datoteke, ki jih lahko izpolnite z ukazi, ki jih želite izvesti, in Windows jih bo zagnal. To je bil pameten in čeden način, kako narediti nekaj opravil, na primer igranje iger v računalniškem računalniku v srednji šoli, ko ne morete odpreti sistemskih map ali ustvariti bližnjic. Batch datoteke v operacijskem sistemu Windows, medtem ko so uporabne, so poceni imitacija skriptov lupine.

Skripti Shell nam omogočajo programiranje ukazov v verigah in jih sistem izvaja kot skriptni dogodek, tako kot datoteke serije. Prav tako omogočajo veliko več uporabnih funkcij, kot je zamenjava ukazov. Lahko se sklicujete na ukaz, kot je datum, in ga uporabite kot del sheme za poimenovanje datotek. Avtomatizirate lahko varnostne kopije in vsaka kopirana datoteka ima lahko trenutni datum, ki je priložen koncu njenega imena. Skripte niso samo povabila ukazov. To so programi sami. Skriptiranje vam omogoča uporabo programskih funkcij - kot so "zanke", "if / then / else statements" in tako naprej - neposredno v vmesniku vašega operacijskega sistema. In vam ni treba naučiti drugega jezika, ker uporabljate tisto, kar že poznate: ukazno vrstico.
Skripti Shell nam omogočajo programiranje ukazov v verigah in jih sistem izvaja kot skriptni dogodek, tako kot datoteke serije. Prav tako omogočajo veliko več uporabnih funkcij, kot je zamenjava ukazov. Lahko se sklicujete na ukaz, kot je datum, in ga uporabite kot del sheme za poimenovanje datotek. Avtomatizirate lahko varnostne kopije in vsaka kopirana datoteka ima lahko trenutni datum, ki je priložen koncu njenega imena. Skripte niso samo povabila ukazov. To so programi sami. Skriptiranje vam omogoča uporabo programskih funkcij - kot so "zanke", "if / then / else statements" in tako naprej - neposredno v vmesniku vašega operacijskega sistema. In vam ni treba naučiti drugega jezika, ker uporabljate tisto, kar že poznate: ukazno vrstico.

Mislim, da je res moč skripte. Programirate lahko z ukazi, ki jih že poznate, pri učenju sponk večine glavnih programskih jezikov. Potrebujete nekaj ponavljajočega in dolgočasnega? Zapišite si! Potrebujete bližnjico za resnično zamahan ukaz? Zapišite si! Želite zgraditi zelo enostaven vmesnik ukazne vrstice za nekaj? Zapišite si!

Preden začneš

Preden začnemo s skriptno serijo, pokrijemo nekaj osnovnih informacij. Uporabili bomo lupino bash, ki jo večina distribucij Linux uporablja. Bash je na voljo tudi za uporabnike operacijskega sistema Mac OS in Cygwin v operacijskem sistemu Windows. Ker je tako univerzalen, bi morali biti sposobni skripta, ne glede na vašo platformo. Poleg tega, dokler obstajajo vsi ukazi, na katere se sklicujemo, skripte lahko delujejo na več platformah, pri čemer je potrebno le malo spreminjanja.

Skriptiranje lahko preprosto uporablja privilegije »administrator« ali »superuser«, zato je najbolje, da preizkusite skripte, preden jih delate. Uporabite tudi zdrav razum, tako kot ste prepričani, da imate varnostne kopije datotek, na katerih želite zagnati skript. Prav tako je pomembno, da uporabite prave možnosti, kot je -i za ukaz rm, tako da je potrebna vaša interakcija. To lahko prepreči nekaj napačnih napak. Kot take, preberite skripte, ki jih prenesete in pazite na podatke, ki jih imate, samo v primeru, da gre kaj narobe.

Skripti so v bistvu zgolj besedilni datoteki. Za pisanje besedil lahko uporabite katerikoli urejevalnik besedil: gedit, emacs, vim, nano … Ta seznam se nadaljuje. Prepričajte se, da ga shranite kot navaden tekst, ne kot bogato besedilo ali Wordov dokument. Ker mi je všeč enostavnost uporabe, ki jo ponuja Nano, bom to izkoristila.

Dovoljenja in imena skriptov

Skripte se izvajajo kot programi, zato morajo imeti ustrezno dovoljenje, da se to zgodi. Skripte lahko izvedete tako, da v njem izvedete naslednji ukaz:

chmod +x ~/somecrazyfolder/script1

To bo omogočilo vsakomur, da bo zagnal ta poseben scenarij. Če želite omejiti uporabo le na svojega uporabnika, ga lahko uporabite:

chmod u+x ~/somecrazyfolder/script1

Če želite zagnati ta skript, bi morali vnesti v ustrezen imenik in nato zagnati skript, kot je ta:

cd ~/somecrazyfolder

./script1

Če želite stvari narediti bolj priročno, lahko skripte postavite v mapo »bin« v domačem imeniku:

~/bin

V mnogih modernih distribucijah ta mapa ni privzeto ustvarjena, vendar jo lahko ustvarite. To je običajno, če so shranjene izvršljive datoteke, ki pripadajo vašemu uporabniku in ne drugim uporabnikom. S tem, da skripte postavite tukaj, jih lahko preprosto zaženete tako, da vnesete svoje ime, tako kot drugi ukazi, namesto da bi morali prebrati in uporabiti predpono »./«.

Preden poimenujete skript, morate narediti naslednji ukaz, da preverite, ali imate nameščen program, ki uporablja to ime:

which [command]

Veliko ljudi imenuje svoje zgodnje skripte "test" in ko ga poskušajo zagnati v ukazni vrstici, se nič ne zgodi. To je zato, ker je v nasprotju s preizkusnim ukazom, ki ne dela nič brez argumentov. Vedno se prepričajte, da imena imenika niso v nasprotju z ukazi, drugače boste morda našli stvari, ki jih ne nameravate storiti!

Navodila za skriptiranje

Kot sem že omenil, je vsaka skriptna datoteka v bistvu preprosto besedilo.To pa ne pomeni, da lahko napišete tisto, kar hočeš, vse, kar je všeč. Ko se poskusi izvajati besedilna datoteka, bodo lupine razčlenjene po njih, da bi ugotovile, ali so skripte ali ne, in kako pravilno ravnati. Zaradi tega obstaja nekaj smernic, ki jih morate poznati.
Kot sem že omenil, je vsaka skriptna datoteka v bistvu preprosto besedilo.To pa ne pomeni, da lahko napišete tisto, kar hočeš, vse, kar je všeč. Ko se poskusi izvajati besedilna datoteka, bodo lupine razčlenjene po njih, da bi ugotovile, ali so skripte ali ne, in kako pravilno ravnati. Zaradi tega obstaja nekaj smernic, ki jih morate poznati.
  1. Vsak skript mora biti z "#! / Bin / bash"
  2. Vsaka nova vrstica je nov ukaz
  3. Linije za komentiranje se začnejo z #
  4. Komande obkrožajo ()

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 uporabljate drugo lupino, tukaj zamenjajte svojo pot. Linije za komentiranje se začnejo s hešami (#), vendar dodate bang (!) In lupinsko pot, potem ko je nekakšen kramp, ki bo zaobidel to pravilo za komentar in bo prisilil, da skript izvrši z lupino, ki jo ta vrstica opozarja.

Nova vrstica = Nov ukaz

Vsako novo vrstico je treba obravnavati kot nov ukaz ali sestavni del večjega sistema. Če /, potem bodo stavki, na primer, prevzeli več vrstic, vendar je vsaka komponenta tega sistema v novi vrstici. Ne dovolite, da se ukaz preusmeri v naslednjo vrstico, ker to lahko skrajša prejšnji ukaz in vam v naslednji vrstici napaka. Če to počne vaš urejevalnik besedil, morate obrniti besedilno ovojnico, da je na varni strani. Izklop besedila lahko izklopite z nano hitrostjo ALT + L.

Comment Pogosto s #s

Če začnete vrstico z #, se vrstica prezre. To se spremeni v vrstico za komentarje, kjer se lahko spomnite, kakšen je bil izhod prejšnjega ukaza ali kaj bo naredil naslednji ukaz. Še enkrat, izklopite prelaganje besedila ali prekinite komentiranje v več vrsticah, da se vse začnejo z razprševanjem. Uporaba veliko komentarjev je dobra praksa, saj omogoča, da vi in drugi ljudje lažje prilagodite svoje skripte. Edina izjema je zgoraj omenjeni Hash-Bang kramp, zato ne sledite #s z! S.;-)

Komande obkrožajo okroglice

V starejših dneh so bile ukazne zamenjave opravljene z enojnimi oznakami ("delil ključ"). Tega še ne bomo se dotaknili, toda, ker se večina ljudi širi in raziskuje po učenju osnov, je verjetno dobra ideja omeniti, da bi morali uporabiti oklepaje namesto tega. To je predvsem zato, ker ko gnezdite - postavite ukaze znotraj drugih ukazov - oklepaji delujejo bolje.

Vaš prvi scenarij

Začnimo s preprostim skriptom, ki vam omogoča kopiranje datotek in dodajanje datumov do konca imena datoteke. Denimo, da je "datecp". Najprej preverimo, ali se to ime v nasprotju z nečim:

Vidite lahko, da ni nobenega izhoda katerega ukaza, zato bomo vsi uporabili to ime.
Vidite lahko, da ni nobenega izhoda katerega ukaza, zato bomo vsi uporabili to ime.

Ustvarimo prazno datoteko v mapi / bin:

touch ~/bin/datecp

Image
Image

In zdaj spremenimo dovoljenje, preden pozabimo:

Začnimo zdaj graditi svoj scenarij. Odprite datoteko v urejevalniku besedila, ki ga želite izbrati. Kot sem rekel, mi je všeč preprostost nano.
Začnimo zdaj graditi svoj scenarij. Odprite datoteko v urejevalniku besedila, ki ga želite izbrati. Kot sem rekel, mi je všeč preprostost nano.

nano ~/bin/datecp

In, gremo naprej, postavimo prvi pogoj in predpostavimo, kaj naredi ta scenarij.

Dalje, razglasi spremenljivko. Če ste kdaj vzeli algebra, verjetno veste, kaj je to. Spremenljivka nam omogoča shranjevanje podatkov in opravljanje stvari z njo. Spremenljivke se lahko "razširijo", kadar se sklicujejo drugje. To pomeni, da bodo namesto prikazovanja njihovega imena prikazale shranjeno vsebino. Pozneje lahko to isto spremenljivko shranite za shranjevanje različnih informacij, vsa navodila, ki se po tem pojavijo, bodo uporabila nove informacije. To je res prefinjeno mesto.
Dalje, razglasi spremenljivko. Če ste kdaj vzeli algebra, verjetno veste, kaj je to. Spremenljivka nam omogoča shranjevanje podatkov in opravljanje stvari z njo. Spremenljivke se lahko "razširijo", kadar se sklicujejo drugje. To pomeni, da bodo namesto prikazovanja njihovega imena prikazale shranjeno vsebino. Pozneje lahko to isto spremenljivko shranite za shranjevanje različnih informacij, vsa navodila, ki se po tem pojavijo, bodo uporabila nove informacije. To je res prefinjeno mesto.

Kaj bomo postavili v spremenljivko? No, hrani datum in uro! Če želite to narediti, bomo poklicali ukaz za datum.

Oglejte si sliko spodaj, kako ustvariti izhod ukaza datuma:

To lahko vidite tako, da dodate različne spremenljivke, ki se začnejo z%, lahko spremenite izhod ukaza na tisto, kar želite. Za več informacij si oglejte priročnik za ukaz datuma.

Uporabimo to zadnjo ponovitev ukaza datuma, "datum +% m_% d_% y-% H.% M.% S" in uporabite to v našem skriptu.

Če bi morali zdaj shraniti ta skript, bi ga lahko zagnali in nam bo dala izhod ukaza datuma, kot smo pričakovali:
Če bi morali zdaj shraniti ta skript, bi ga lahko zagnali in nam bo dala izhod ukaza datuma, kot smo pričakovali:
Toda naredimo nekaj drugega. Naj navedemo ime spremenljivke, na primer date_formatted tega ukaza. Pravilna sintaksa za to je naslednja:
Toda naredimo nekaj drugega. Naj navedemo ime spremenljivke, na primer date_formatted tega ukaza. Pravilna sintaksa za to je naslednja:

variable=$(command –options arguments)

In za nas bi to zgradili tako:

date_formatted=$(date +%m_%d_%y-%H.%M.%S)

To imenujemo zamenjava ukazov. V bistvu govorimo bash, da se pri prikazu spremenljivke "date_formatted" izvede ukaz znotraj oklepajev. Potem, ne glede na izhod, ki ga dajejo ukazi, se prikaže namesto imena spremenljivke, date_formatted.
To imenujemo zamenjava ukazov. V bistvu govorimo bash, da se pri prikazu spremenljivke "date_formatted" izvede ukaz znotraj oklepajev. Potem, ne glede na izhod, ki ga dajejo ukazi, se prikaže namesto imena spremenljivke, date_formatted.

Tukaj je primer skripta in njegovega izpisa:

Image
Image
Upoštevajte, da v izhodu sta dva presledka. Prostor znotraj kotacij ukaza echo in prostor pred spremenljivko sta prikazani. Ne uporabljajte presledkov, če jih ne želite prikazati. Upoštevajte tudi, da brez te dodane črke "echo" skript ne bi imel nobenega rezultata.
Upoštevajte, da v izhodu sta dva presledka. Prostor znotraj kotacij ukaza echo in prostor pred spremenljivko sta prikazani. Ne uporabljajte presledkov, če jih ne želite prikazati. Upoštevajte tudi, da brez te dodane črke "echo" skript ne bi imel nobenega rezultata.

Vrnimo se k našemu skriptu. Naj dodamo v kopirajoči del ukaza.

cp –iv $1 $2.$date_formatted

S tem boste sklicali ukaz za kopiranje z možnostmi -i in -v. Prvi bo zahteval preverjanje pred prepisovanjem datoteke, ta pa bo prikazal, kaj je v ukazni vrstici.
S tem boste sklicali ukaz za kopiranje z možnostmi -i in -v. Prvi bo zahteval preverjanje pred prepisovanjem datoteke, ta pa bo prikazal, kaj je v ukazni vrstici.

Nato lahko vidite, da sem dodal možnost »$ 1«.Pri skriptiranju znak za dolar ($), ki mu sledi številka, označuje ta oštevilčen argument skripte, ko se je skliceval. Na primer, v naslednjem ukazu:

cp –iv Trogdor2.mp3 ringtone.mp3

Prvi argument je: ÄúTrogdor2.mp3, Äù in drugi argument je Äúringtone.mp3,Äù.

Če pogledamo nazaj na naš skript, lahko vidimo, da se sklicujemo na dva argumenta:

To pomeni, da bomo pri zagonu skripta morali zagotoviti dva argumenta, da se skript pravilno izvaja. Prvi argument, $ 1, je datoteka, ki bo kopirana, in se nadomesti kot prvi, Äúcp, Äìiv,Äù ukaz, prvi argument.
To pomeni, da bomo pri zagonu skripta morali zagotoviti dva argumenta, da se skript pravilno izvaja. Prvi argument, $ 1, je datoteka, ki bo kopirana, in se nadomesti kot prvi, Äúcp, Äìiv,Äù ukaz, prvi argument.

Drugi argument, $ 2, bo deloval kot izhodna datoteka za isti ukaz. Ampak, lahko tudi vidite, da je drugačen. Mi smo dodali obdobje in mi smo na zgornji seznam spremenili spremenljivko Äddate_formatted. Radoveden, kaj to počne?

Tukaj se dogaja, ko se skript izvaja:

Vidite, da je izhodna datoteka navedena kot karkoli sem vnesel za $ 2, ki mu sledi obdobje, nato pa izhod iz ukaza datuma! Ima smisel, kajne?
Vidite, da je izhodna datoteka navedena kot karkoli sem vnesel za $ 2, ki mu sledi obdobje, nato pa izhod iz ukaza datuma! Ima smisel, kajne?

Zdaj, ko zaženem ukaz datecp, bo zagnal ta skript in mi dovolil, da kopiram katero koli datoteko na novo lokacijo in samodejno dodam datum in uro do končnega imena datoteke. Uporabno za arhiviranje stvari!

Shell skriptiranje je v središču, da vaš OS deluje za vas. Ne smete se naučiti novega programskega jezika, da bi se to zgodilo. Poskusite skriptirati z nekaj osnovnimi ukazi doma in začeti razmišljati o tem, kaj lahko uporabite za to.

Ali ste scenarij? Imate kakšen nasvet za newbies? Delite svoje misli v komentarjih! V tej seriji je še več!

Priporočena: