Pradedančiojo „Shell Scripting The Basics“ vadovas
Terminas „apvalkalo scenarijus“ dažnai minimas „Linux“ forumuose, tačiau daugelis jų nėra susipažinę. Šio paprasto ir galingo programavimo metodo mokymas gali padėti jums sutaupyti laiko, geriau išmokti komandų eilutę ir uždrausti nuobodų failų tvarkymo užduotis.
Kas yra Shell scenarijus?
Būdamas Linux vartotojas reiškia, kad jūs žaidžiate su komandine eilute. Patinka, ar ne, yra tik keletas dalykų, kurie yra atliekami daug lengviau per šią sąsają nei rodydami ir spustelėdami. Kuo daugiau naudosite ir išmoksite komandinę eilutę, tuo daugiau matysite jo potencialą. Na, pati komandinė eilutė yra programa: apvalkalas. Šiandien dauguma „Linux“ programų naudoja „Bash“, ir tai yra tai, ką jūs iš tikrųjų įvedate.
Dabar kai kurie iš jūsų, kurie naudojosi „Windows“ prieš naudodami „Linux“, gali prisiminti paketinius failus. Tai buvo nedideli tekstiniai failai, kuriuos galėjote užpildyti komandomis, kurias vykdys, o „Windows“ juos vykdys savo ruožtu. Tai buvo protingas ir tvarkingas būdas gauti kai kuriuos dalykus, pvz., Paleisti žaidimus savo vidurinės mokyklos kompiuterio laboratorijoje, kai negalėjote atidaryti sistemos aplankų ar sukurti nuorodų. „Windows“ paketiniai failai, nors ir naudingi, yra pigūs korpuso scenarijų imitacija.
„Shell“ scenarijai leidžia programuoti komandas grandinėse ir sistemai juos vykdyti kaip scenarijų, kaip ir rinkmenų. Jie taip pat leidžia daug daugiau naudingų funkcijų, pvz., Komandų keitimo. Galite naudoti komandą, pvz., Datą, ir naudoti jos išvestį kaip failų pavadinimų schemos dalį. Galite automatizuoti atsargines kopijas ir kiekvienas nukopijuotas failas gali pridėti dabartinę datą prie pavadinimo pabaigos. Skriptai taip pat yra ne tik komandų šaukimai. Jie yra savarankiškos programos. Scenarijus leidžia naudoti programavimo funkcijas, pvz., „Kilpų“, jei / tada / kitas pareiškimus ir pan. - tiesiogiai operacinės sistemos sąsajoje. Ir jūs neturite mokytis kitos kalbos, nes naudojate tai, ką jau žinote: komandų eilutę.
Manau, kad tai yra scenarijų galia. Programuojate su jau žinomomis komandomis, mokydami daugelio svarbiausių programavimo kalbų kabelius. Reikia daryti kažką pasikartojančio ir varginančio? Script it! Reikia trumpos komandos, skirtos tikrai susikabinusioms komandoms? Script it! Norite kažkam sukurti paprastą naudoti komandinės eilutės sąsają? Script jį!
Prieš tau pradedant
Prieš pradėdami scenarijų seriją, padarykime pagrindinę informaciją. Mes naudosime „bash“ kevalą, kurį dauguma „Linux“ platinimo programų naudoja natūraliai. „Bash“ yra prieinama ir „Mac OS“ vartotojams, ir „Cygwin“ sistemoje „Windows“. Kadangi tai taip universalus, turėtumėte turėti galimybę rašyti, nepaisant jūsų platformos. Be to, tol, kol visos nurodytos nuorodos egzistuoja, scenarijai gali veikti keliose platformose, kurių nereikia keisti..
Skriptai gali lengvai pasinaudoti „administratoriaus“ arba „super naudotojo“ privilegijomis, todėl geriausia išbandyti scenarijus, prieš pradėdami juos dirbti. Taip pat naudokitės sveiku protu, pavyzdžiui, įsitikinkite, kad turite atsarginių failų, kuriuos ketinate paleisti, kopijas. Taip pat labai svarbu naudoti tinkamas parinktis, pvz., -I, kad būtų galima atlikti sąveiką. Tai gali užkirsti kelią tam tikroms bjaurėms klaidoms. Tokiu būdu perskaitykite atsisiuntusius scenarijus ir būkite atsargūs su turimais duomenimis, tik tuo atveju, jei viskas atsitiks.
Pagrindiniai scenarijai yra tiesiog tekstiniai failai. Jų rašymui galite naudoti bet kurį teksto redaktorių: gedit, emacs, vim, nano ... Šis sąrašas tęsiasi. Būtinai išsaugokite jį kaip paprastą tekstą, o ne kaip turtingą tekstą arba „Word“ dokumentą. Kadangi aš myliu paprastą naudojimą, kurį teikia „nano“, aš naudosiu tai.
Skriptų leidimai ir vardai
Skriptai vykdomi kaip panašios programos ir tam, kad tai įvyktų, jie turi turėti tinkamus leidimus. Galite padaryti scenarijus vykdomąjį, atlikdami šią komandą:
chmod + x ~ / somecrazyfolder / script1
Tai leis kiekvienam paleisti tą konkretų scenarijų. Jei norite apriboti jo naudojimą tik savo naudotojui, galite jį naudoti:
chmod u + x ~ / somecrazyfolder / script1
Jei norite paleisti šį scenarijų, turėsite cd į tinkamą katalogą ir paleisti tokį scenarijų:
cd ~ / somecrazyfolder
./ scenarijus1
Jei norite, kad tai būtų patogu, galite įdėti į „bin“ aplanką savo namų kataloge:
~ / bin
Daugelyje šiuolaikinių sričių šis aplankas nebėra sukurtas pagal nutylėjimą, tačiau galite jį sukurti. Paprastai tai yra tais atvejais, kai vykdomieji failai yra saugomi jūsų naudotojui, o ne kitiems vartotojams. Pateikdami skriptus, galite tiesiog juos paleisti įvesdami jų pavadinimą, kaip ir kitas komandas, užuot cd aplink ir naudodami „./“ priešdėlį.
Prieš pavadindami scenarijų, turėtumėte atlikti šią komandą, kad patikrintumėte, ar turite įdiegtą programą, kurioje naudojamas šis pavadinimas:
kuri [komanda]
Daugelis žmonių nurodo savo ankstyvą scenarijų „testą“, o kai jie bando paleisti jį komandinėje eilutėje, nieko neįvyksta. Taip yra todėl, kad ji prieštarauja bandymo komandai, kuri nieko nedaro be argumentų. Visada įsitikinkite, kad jūsų scenarijų pavadinimai neprieštarauja komandoms, kitaip galite rasti sau tai, ką nenorite daryti!
Scenarijų gairės
Kaip minėjau anksčiau, kiekvienas scenarijų failas iš esmės yra paprastas tekstas. Tai nereiškia, kad jūs galite rašyti, ko norite, bet visi. Kai bandoma atlikti tekstinį failą, kriauklės juos perskaitys, kad sužinotų, ar jie yra scenarijai, ar ne, ir kaip tvarkyti viską tinkamai. Dėl šios priežasties yra keletas gairių, kurias reikia žinoti.
- Kiekvienas scenarijus turėtų būti „#! / Bin / bash“
- Kiekviena nauja eilutė yra nauja komanda
- Komentarų eilutės prasideda #
- Komandas supa ()
Hash-Bang Hack
Kai apvalkalas apdoroja tekstinį failą, tiesioginis būdas identifikuoti failą kaip scenarijų yra pirmosios eilutės sudarymas:
#! / bin / bash
Jei naudojate kitą apvalkalą, čia pakeiskite savo kelią. Komentarų eilutės prasideda su hashes (#), bet pridedant sprogimo (!) Ir apvalkalo kelią po to, kai jis yra tam tikras įsilaužimas, kuris apeis šią komentaro taisyklę ir priverčia scenarijų vykdyti su korpusu, kurį ši eilutė nurodo.
Nauja eilutė = nauja komanda
Kiekviena nauja eilutė turėtų būti laikoma nauja komanda, arba didesnės sistemos komponentas. Pavyzdžiui, jei / tada / kiti pareiškimai perims kelias eilutes, tačiau kiekviena šios sistemos dalis yra nauja eilutėje. Neleisk, kad komanda perleistų į kitą eilutę, nes tai gali sutrumpinti ankstesnę komandą ir suteikti klaidą kitoje eilutėje. Jei teksto redaktorius tai daro, turėtumėte išjungti teksto įvyniojimą, kad jis būtų saugioje pusėje. Jūs galite išjungti teksto įvyniojimą nano bitų pataikyti į ALT + L.
Komentaras Dažnai su #s
Jei pradėsite liniją su #, linija ignoruojama. Tai paverčia jį į komentarų eilutę, kur galite priminti sau, kas buvo ankstesnės komandos išvestis, arba ką darys kita komanda. Vėlgi išjunkite teksto įvyniojimą arba pertraukite komentarą į kelias eilutes, kurios prasideda nuo maišos. Naudojant daug pastabų, reikia laikytis geros praktikos, nes tai leidžia jums ir kitiems žmonėms patobulinti jūsų scenarijus. Vienintelė išimtis yra minėta Hash-Bang Hack, todėl nereikia sekti # s su! S. ;-)
Komandos yra apsuptos paraštėmis
Senesnėmis dienomis komandų pakeitimai buvo atlikti su vienu žymėjimo ženklu (', dalijamasi ~ klavišu). Dar to nepadarysime, tačiau, kadangi dauguma mokinių išeina ir tyrinėja po pagrindų, tai turbūt yra gera idėja paminėti, kad turėtumėte naudoti skliaustelius. Tai daugiausia dėl to, kad kai įdėsite komandas į kitas komandas - skliausteliai veikia geriau.
Jūsų pirmasis scenarijus
Pradėkime nuo paprasto scenarijaus, leidžiančio kopijuoti failus ir pridėti datos prie failo vardo pabaigos. Skambinkime „datecp“. Pirmiausia patikrinkite, ar šis pavadinimas prieštarauja kažkam:
Galite matyti, kad nėra jokios komandos išvesties, todėl visi turime naudoti šį pavadinimą.
Sukurkite tuščią failą aplanke ~ / bin:
palieskite ~ / bin / datecp
Ir pakeiskime leidimą dabar, prieš pamiršdami:
Pradėkime kurti savo scenarijų. Atidarykite šį failą pasirinktame teksto redaktoriuje. Kaip sakiau, man patinka nano paprastumas.
nano ~ / bin / datecp
Ir eikime į priekį ir įdėkime pirmąją eilutę ir komentarą apie tai, ką šis scenarijus daro.
Toliau paskelbsime kintamąjį. Jei kada nors naudojote algebrą, tikriausiai žinote, kas tai yra. Kintamasis leidžia mums saugoti informaciją ir daryti su ja susijusius dalykus. Kituose kintamuose kintamieji gali „išplėsti“. Tai reiškia, kad vietoj to, kad būtų rodomas jų vardas, jie rodys savo saugomą turinį. Vėliau galite pasakyti, kad tas pats kintamasis gali išsaugoti skirtingą informaciją, ir bet kokius po to pateikiamus nurodymus, bus naudojama nauja informacija. Tai tikrai išgalvotas vietos lankytojas.
Ką įvesime kintamąjį? Na, leiskite laikyti datą ir laiką! Norėdami tai padaryti, skambinsime datų komandai.
Pažvelkite į žemiau pateiktą ekrano kopiją, kaip sukurti datos komandos išvestį:
Galite matyti, kad pridedant skirtingus kintamuosius, kurie prasideda nuo%, galite pakeisti komandos išvestį į norimą. Norėdami gauti daugiau informacijos, galite ieškoti datos komandos rankiniame puslapyje.
Panaudosime tą paskutinį datos komandos iteraciją, „data +% m_% d_% y-% H.% M.% S“, ir naudokite tai mūsų scenarijuje.
Jei dabar įrašytume šį scenarijų, galėtume jį paleisti ir duoti mums datų komandos, kaip mes tikėjomės, produkciją:
Bet, darykime kažką kitą. Pateikiame kintamojo pavadinimą, pvz., Data_formatted į šią komandą. Tinkama sintaksė yra tokia:
kintamasis = $ (komandųopcijų argumentai)
Ir mums mes jį statytume taip:
date_formatted = $ (data +% m_% d_% y-% H.% M.% S)
Tai vadiname komandų pakeitimu. Mes iš esmės sakome „bash“, kad kai rodomas kintamasis „date_formatted“, paleiskite komandą skliausteliuose. Tada, nepriklausomai nuo kintamojo pavadinimo, „data_formatted“, turėtų būti rodomos bet kokios išvesties komandos..
Štai pavyzdinis scenarijus ir jo išvestis:
Atkreipkite dėmesį, kad išėjime yra dvi vietos. Echo komandos kabučių ir erdvės, esančios prieš kintamąjį, citatos yra rodomos. Nenaudokite tarpų, jei nenorite, kad jos būtų rodomos. Taip pat atkreipkite dėmesį, kad be šios pridėtos „echo“ linijos scenarijus visiškai neišvestų.
Grįžkime prie mūsų scenarijaus. Toliau pridėkime kopijavimo komandos dalį.
cp -iv $ 1 $ 2. $ date_formatted
Tai sukels kopijavimo komandą su -i ir -v parinktimis. Pirmasis paprašys jūsų patvirtinimo prieš perrašant failą, o pastarasis parodys, kas yra žemyn komandinėje eilutėje.
Toliau galite matyti, kad pridėjau „$ 1“ parinktį. Kai skriptuojama, dolerio ženklas ($), po kurio yra numeris, nurodys, kad sunumeruotas scenarijaus argumentas, kai jis buvo naudojamas. Pavyzdžiui, šioje komandoje:
cp -iv Trogdor2.mp3 skambėjimo tonas.mp3
Pirmasis argumentas yra „Trogdor2.mp3“ ir antrasis argumentas yra „skambėjimo tonas“..
Žvelgdami atgal į mūsų scenarijų matome, kad nurodome du argumentus:
Tai reiškia, kad paleisdami scenarijų turėsime pateikti du argumentus, kad scenarijus veiktų teisingai. Pirmasis argumentas, $ 1, yra failas, kuris bus nukopijuotas ir pakeistas pirmuoju „cp -iv“ komandos argumentu.
Antrasis argumentas, $ 2, veiks kaip tos pačios komandos išvesties failas. Bet jūs taip pat galite pamatyti, kad jis skiriasi. Pridėjome laikotarpį ir nurodėme „date_formatted“ kintamąjį iš viršaus. Smalsu, ką tai daro?
Štai kas atsitinka, kai scenarijus paleistas:
Jūs galite matyti, kad išvesties failas yra įtrauktas į tai, ką įvedžiau už $ 2, po kurio seka laikotarpis, tada datos komandos išvestis! Sukelia prasmę?
Dabar, kai paleisiu datecp komandą, jis paleis šį scenarijų ir leis man nukopijuoti bet kurį failą į naują vietą ir automatiškai pridėti datą ir laiką failo vardo pabaigai. Naudinga archyvuoti!
„Shell“ scenarijus yra pagrindinis jūsų OS darbas. Jūs taip pat neturite išmokti naujos programavimo kalbos, kad tai įvyktų. Pabandykite skriptus su kai kuriomis pagrindinėmis komandomis namuose ir pradėkite galvoti apie tai, ką galite naudoti.
Ar scenarijus? Ar turite patarimų naujokams? Pasidalinkite savo mintimis komentaruose! Šioje serijoje yra daugiau!