23Aug
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, da programirate ukaze v verigah in jih sistem izvede 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", če so izjave /then/ in podobno - neposredno v vmesniku vašega operacijskega sistema. In vam ni treba naučiti drugega jezika, ker uporabljate tisto, kar že poznate: ukazno vrstico.
To je res moč skripte, mislim. 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čnete
Preden začnemo z našo 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 pisati scenarij 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.
V bistvu so skripte samo datoteke s preprostimi besedili. 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 zagotavlja Nano, bom to izkoristila.
Skripte Dovoljenja in imena Skripti
se izvajajo kot programi, zato morajo imeti ustrezno dovoljenje. Skripte lahko izvedete tako, da v njem izvedete naslednji ukaz:
chmod + x ~ /somecrazyfolder/ scenarij1
To bo omogočilo vsakomur, da bo zagnal ta poseben skript.Če želite omejiti uporabo le na svojega uporabnika, jo lahko uporabite namesto tega:
chmod u + x ~ /somecrazyfolder/ skript1
Če želite zagnati ta skript, morate 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 sodobnih 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 »./«.
Pred imenovanjem skripta morate narediti naslednji ukaz, da preverite, ali imate nameščen program, ki uporablja to ime:
, ki [ukaz]
Veliko ljudi imenuje svoje zgodnje skripte "test" in ko poskušajoga zaženite 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 navadno 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 za ugotovitve, ali so skripte ali ne in kako ravnati pravilno. Zaradi tega obstaja nekaj smernic, ki jih morate poznati.
- Vsak skript mora biti z "#!/bin/ bash "
- Vsaka nova vrstica je nov ukaz
- Linije za komentiranje se začnejo s #
- Komande so obdane z()
Hash-Bang Hack
Ko lupina razčleni skozi tekstovno datoteko, je najbolj neposreden način za identifikacijo datoteke kotscenarij je 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 komponento večjega sistema.Če bodo na primer izjave /then/ druge, bodo prevzele 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 z # 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( "deli, ključi").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 skript
Začnimo s preprostim skriptom, ki vam omogoča, da kopirate datoteke in dodate datume do konca imena datoteke. Denimo, da je "datecp".Najprej preverimo, ali je to ime v navzkrižju z nečim:
Vidite lahko, da ni nobenega izhoda katerega ukaza, zato bomo vsi uporabili to ime.
Ustvarimo prazno datoteko v mapi ~ / bin:
dotaknite ~ /bin/ datecp
In zdaj spremenimo dovoljenje, preden pozabimo:
Začnimo s tem zgraditi svoj skript. Odprite datoteko v urejevalniku besedila, ki ga želite izbrati. Kot sem rekel, mi je všeč preprostost nano.
nano ~ /bin/ datecp
In, gremo naprej in postavimo v prvo vrstico predpogoja in komentar o tem, 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.
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 za datum:
Z dodajanjem različnih spremenljivk, ki se začnejo z%, lahko spremenite izhod ukaza na želeno. 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 za datum, kot smo pričakovali:
Ampak naredimo nekaj drugega. Naj navedemo ime spremenljivke, na primer date_formatted tega ukaza. Primerna sintaksa za to je naslednja: spremenljivka
= $( ukaz -options argumenti)
In za nas bi to zgradili takole:
date_formatted = $( datum +% 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.
Tukaj je primer scenarij in njegov izhod:
Upoštevajte, da sta na izhodu dva prostora. 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.
Nazaj v naš skript. Naj dodamo v kopirajoči del ukaza.
cp -iv $ 1 $ 2. $ date_formatted
S temi ukazi kopirate ukaz -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".
Glede na naš skript lahko vidimo, da se sklicujemo na dva argumenta:
To pomeni, da moramo pri zagonu skripta pravilno zagnati dva argumenta. Prvi argument, $ 1, je datoteka, ki bo kopirana, in se nadomesti kot prvi argument ukaza "cp -iv".
Drugi argument, $ 2, bo deloval kot izhodna datoteka za isti ukaz. Ampak, lahko tudi vidite, da je drugačen. Dodali smo obdobje in z zgornje strani smo sklicevali na spremenljivko »date_formatted«.Radoveden, kaj to počne?
Tukaj je, kar se zgodi, ko je skript prikazan:
Vidite lahko, da je izhodna datoteka navedena kot karkoli sem vnesel za $ 2, ki mu sledi obdobje, nato izhod ukaza za datum! 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 konca imena datoteke. Uporabno za arhiviranje stvari!
Shell skriptiranje je v središču, da vaš OS deluje za vas. Ni vam treba 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č!