23Aug

"Shell" scenarijų pradedančiųjų vadovas: pagrindai

Terminas "shell scripting" dažnai minimas Linux forumuose, tačiau daugelis vartotojų nėra susipažinę su ja. Mokymasis šis lengvas ir galingas programavimo metodas gali padėti sutaupyti laiko, geriau išmokti komandinę eilutę ir ištrinti nuobodų failų valdymo užduotis.

Kas yra "Shell" scenarijus?

Būdamas "Linux" vartotojas reiškia, kad žaidžiate su komandų eilute. Patinka tai ar ne, yra tik keletas dalykų, kurie atliekami daug lengviau per šią sąsają, negu nurodant ir spustelėję.Kuo daugiau naudosite ir sužinok komandų eilutę, tuo daugiau matysite jo potencialą.Na, pats komandų eilutė yra programa: "shell".Dauguma "Linux distros" šiandien naudoja "Bash", ir tai, ką jūs tikrai įvedate komandas.

Dabar kai kurie iš jūsų, kurie naudojo "Windows" prieš naudodami "Linux", gali prisiminti paketinius failus. Tai buvo mažai tekstinių failų, kuriuos galėtumėte užpildyti vykdydami komandas, o "Windows" juos sukūrė.Tai buvo protingas ir tvarkingas būdas atlikti tam tikrus veiksmus, pvz., Paleisti žaidimus jūsų aukštosios mokyklos kompiuterių laboratorijoje, kai negalėjote atidaryti sistemos aplankų ar kurti nuorodas. Bandomieji failai "Windows", nors ir naudingi, yra pigūs scenarijų apvalkalo imitacija.

Shell scenarijai leidžia mums programuoti komandas grandinėse ir sistemai juos vykdyti kaip scenarijus, kaip ir partijos rinkmenas. Jie taip pat leidžia atlikti daugiau naudingų funkcijų, pavyzdžiui, komandų pakeitimo. Galite pakviesti komandą, pvz., Datą, ir naudoti ją kaip failų pavadinimo schemos dalį.Galite automatizuoti atsargines kopijas ir kiekvienas nukopijuotas failas gali pridėti dabartinę datą prie jo pavadinimo pabaigos. Skriptai yra ne tik komandų išraiškos. Jie yra programos savarankiškai. Scripting leidžia naudoti programavimo funkcijas, pvz., "For" kilpoms, jei /then/ kiti teiginiai ir kt., Tiesiogiai operacinės sistemos sąsajoje. Ir jūs neturite išmokti kitos kalbos, nes naudojate tai, ką jau žinote: komandų eilutę.

Tai tikrai scenarijų galia, manau. Jūs gaunate programą su komandomis, kurias jau žinote, tuo pačiu metu mokydamiesi daugelio pagrindinių programavimo kalbų.Reikia daryti kažką pasikartojančio ir varginančio? Script it! Reikia spartieji klavišai tikrai sukurtinei komandai? Script it! Norite kurti tikrai lengva naudoti komandų eilutės sąsają kažką?Script it!

Prieš pradėdami

Prieš pradėdami scenarijų seriją, pateiksime keletą pagrindinių duomenų.Mes naudosime "bash" apvalkalo, kuris daugeliu Linux distribucijų naudojamas natively."Bash" galima įsigyti "Mac OS" vartotojams ir "Cygwin" sistemoje "Windows".Kadangi tai yra toks universalus, turėtumėte turėti galimybę scenarijų nepriklausomai nuo jūsų platformos. Be to, kol visose nurodytose komandose egzistuoja, scenarijai gali veikti keliose platformose, kurių nereikia truputį keisti.

scenarijus gali lengvai pasinaudoti "administratoriaus" arba "superuserio" privilegijomis, todėl geriausia išbandyti scenarijus prieš juos įdiegiant į darbą.Taip pat naudokite sveiką prasmę, pvz., Įsitikinkite, kad turite atsarginių kopijų failus, kuriuos ketinate paleisti scenarijų.Taip pat labai svarbu naudoti tinkamas parinktis, pavyzdžiui, -i komandai rm, kad jūsų sąveika būtų reikalinga. Tai gali užkirsti kelią keistam klaidinančiam klaidinimui. Tokiu būdu perskaitykite scenarijus, kuriuos atsisiųsite, ir būkite atsargūs su turimais duomenimis, jei viskas nepasiteisina.

Iš esmės scenarijai yra tik paprastų tekstinių failų.Galite naudoti bet kokį teksto redaktorių, norėdami juos parašyti: 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 man patinka naudojimo patogumas, kurį teikia "nano", aš jį naudosiu.

scenarijaus leidimai ir vardai

scenarijus yra vykdomi kaip programos, ir tam, kad tai įvyktų, jie turi turėti tinkamus įgaliojimus. Galite atlikti scenarijus, vykdomus, paleisdami šią komandą:

chmod + x ~ /somecrazyfolder/ script1

Tai leis kiekvienam paleisti tą konkretų scenarijų.Jei norite apriboti jo naudojimą tik jūsų vartotojui, galite jį naudoti:

chmod u + x ~ /somecrazyfolder/ script1

Norėdami paleisti šį scenarijų, jums reikės CD į tinkamą katalogą ir paleisti tokį scenarijų:

cd ~ / somecrazyfolder

. /script1

Norėdami padaryti viską patogiau, galite įdėti scenarijus į aplanką "bin" jūsų namų kataloge:

~ / bin

Daugelyje modernių distribucijų šis aplankas nebėra sukurtas pagal nutylėjimą, bet galite jį sukurti. Tai paprastai ten, kur vykdomieji failai yra saugomi, priklausantys jūsų naudotojui, o ne kitiems naudotojams.Įdėdami scenarijus čia, galite tiesiog paleisti juos, įveskite savo vardą, kaip ir kitas komandas, o ne cd aplink ir naudoti "./" prefiksą.

Prieš įvardydami scenarijų, turėtumėte atlikti šią komandą, kad patikrintumėte, ar turite įdiegtą programą, kuri naudoja šį vardą:

, kuri [command]

Daug žmonių pavadina savo ankstyvą scenarijų "test" ir bandopaleiskite jį komandinėje eilutėje, nieko neįvyks. Taip yra todėl, kad jis prieštarauja bandymo komandai, kuri nieko nedaro be argumentų.Visada įsitikinkite, kad jūsų scenarijų pavadinimai neprieštarauja komandoms, kitaip jums gali atrodyti, kad darai tai, ko neketinate 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 tai, ko norėtumėte, viską viliškai, nepaisant to. Kai teksto failą bandoma paleisti, lukštai per juos analizuos už užuominas apie tai, ar jie yra scenarijai, ar ne, ir kaip tinkamai tvarkyti viską.Dėl to yra keli gairės, kurių reikia žinoti.

  1. Kiekvienas scenarijus turi būti su "#!/bin/ bash "
  2. Kiekviena nauja eilutė yra nauja komanda
  3. Komentarų eilutės prasideda nuo #
  4. Komandos yra apsuptas()

" Hash-Bang Hack

"Kai aplankas analizuojamas per teksto failą, pats tiesioginis būdas identifikuoti failą kaipscenarijus yra padaryti savo pirmąją eilutę:

#!/bin/ bash

Jei naudojate kitą korpusą, pakeiskite savo kelią čia. Komentarų eilutės prasideda iš hashų( #), tačiau pridedant spragą( !) Ir apvalkalo kelią po to, kai tai yra hackas, kuris apeins šią komentarų taisyklę ir privers skriptą veikti su apvalkalu, į kurį nurodo ši eilutė.

Naujoji linija = naujoji komanda

Kiekviena nauja eilutė turėtų būti laikoma nauja komanda arba didesnės sistemos komponentas. Pavyzdžiui, jei /then/ kiti teiginiai perims kelias eilutes, tačiau kiekviena tos sistemos sudedamoji dalis yra nauja eilutė.Neleiskite komandai kraujuoti į kitą eilutę, nes tai gali sutrumpinti ankstesnę komandą ir pateikti klaidą kitoje eilutėje. Jei jūsų teksto redaktorius tai daro, turėtumėte išjungti teksto apvyniojimą saugioje pusėje. Galite išjungti teksto įvyniojimą nano bitų paspaudimu ALT + L.

Comment Dažnai su #s

Jei pradėsite eilutę su #, eilutė bus ignoruojama. Tai paverčia į komentarų eilutę, kurioje galite priminti save apie tai, ką atliko ankstesnės komandos išvestis arba kokia bus kita komanda. Vėlgi, išjunkite teksto įklijimą arba pertraukite komentavimą į kelias eilutes, kurios visos prasideda maišais. Naudojant daugybę pastabų yra gera praktika išlaikyti, nes ji leidžia jums ir kitiems žmonėms lengviau pritaikyti scenarijus. Vienintelė išimtis yra aukščiau paminėta "Hash-Bang", todėl nesilaikykite #s with! S.;-)

komandos yra apsuptos linijomis

Vyresnėmis dienomis komandų pakeitimai buvo atlikti su vienos žymos ženklais( `, dalijasi ~ raktu).Mes nesirūpinsime šiuo klausimu, tačiau, kaip dauguma žmonių išeina ir išmėgina iš pradžių mokydamiesi, tikriausiai gera paminėti, kad vietoj to turite naudoti skliaustus. Tai daugiausia todėl, kad kai jūs lizdai - įdėti komandas viduje kitų komandų - skliaustuose geriau dirbti.

Jūsų pirmasis scenarijus

Pradėkime nuo paprasto scenarijaus, kuris leidžia kopijuoti failus ir pridėti datas prie failo pabaigos. Paskambėkime kaip "datecp".Pirmiausia patikrinkime, ar šis vardas nesuderinamas su kažkuo:

Jūs galite pamatyti, kad nėra tos komandos išvesties, todėl mes visi esame pasiruošę naudoti šį pavadinimą.

Sukurkime tuščią failą aplanke ~ / bin:

touch ~ /bin/ datecp

Ir dabar pakeiskime leidimą, prieš pamiršdami:

Pradėkime kurti scenarijų.Atidarykite tą failą pasirinkto teksto redaktoriuje. Kaip sakiau, man patinka nano paprastumas.

nano ~ /bin/ datecp

Ir toliau eikime į priekį ir įdėkite pirmosios eilutės prielaidą ir pastabą apie tai, ką šis scenarijus daro.

Toliau deklaruojame kintamąjį.Jei kada nors vartojote algebą, tikriausiai žinote, kas tai yra. Kintamasis leidžia mums saugoti informaciją ir daryti su juo susijusius veiksmus. Kintamieji gali "išplėsti", kai nurodomi kitur. Tai reiškia, kad vietoj jų vardo rodymo jie parodys jų saugomą turinį.Vėliau galite pasakyti tą patį kintamąjį, kad išsaugotumėte skirtingą informaciją, o po bet kokio instrukcijos bus naudojama nauja informacija. Tai tikrai išgalvotas rezervuaras.

Ką mes įdiegsime iš kintamojo? Na, saugykime datą ir laiką!Norėdami tai padaryti, mes paskambinsime datos komandą.

Peržiūrėkite toliau pateiktą ekrano kopiją, kaip sukurti datos komandų išvestį:

Jūs galite pamatyti, kad pridėdami skirtingus kintamuosius, kurie prasideda%, galite pakeisti komandos išvestį į norimą.Norėdami gauti daugiau informacijos, galite peržiūrėti datos komandų vadovą.

Leiskite naudoti tą paskutinę datos komandų kartotinę datą "date +% m_% d_% y-% H.% M.% S" ir naudoti ją mūsų scenarijuje.

Jei mes dabar išsaugotume šį scenarijų, galėtume jį paleisti, ir tai suteiktų mums datos komandų išvesties, kaip mes tikėjomės:

Bet atliksime kažką kitokio. Pateikime kintamojo pavadinimą, pvz., Date_formatted pagal šią komandą.Tinkama sintaksė yra tokia:

variklis = $( komandos-opcijos argumentai)

Ir mums mes jį pastatyti taip:

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

Tai yra tai, ką mes vadiname komandų pakeitimu. Mes iš esmės sakome, kad kaskart, kai pasirodo kintamasis "date_formatted", paleisti komandą viduje skliaustuose. Tada, nepriklausomai nuo išvesties, kurią pateikia komandos, turėtų būti rodomas vietoj kintamojo pavadinimo, "date_formatted".

Štai pavyzdžio scenarijus ir jo išvestis:

Atkreipkite dėmesį, kad išėjimo lauke yra du tarpai. Ekrane rodomos erdvės tarp echo komandų kabučių ir prieš kintamąjį esančios vietos. Nenaudokite tarpų, jei nenorite, kad jie rodomi. Taip pat atkreipkite dėmesį, kad be šios pridėtos "echo" eilutės, scenarijus nesuteiks jokios išvesties.

Grįžkime prie mūsų scenarijaus. Leiskite dar kartą pridėti kopijavimo dalį komandą.

cp -iv $ 1 $ 2. $ date_formatted

Tai bus komanda iš komandų, naudodama -i ir -v parinktis. Pirmasis paprašys jūsų patvirtinti prieš perrašydamas failą, o pastarasis parodys, kas yra žemyn komandinėje eilutėje.

Toliau matysite, kad pridėjau parinktį "$ 1".Kai scenarijus, dolerio ženklas( $), po kurio nurodomas numeris, žymi tą numerį pažymėtą scenarijaus argumentą, kai jis buvo pakviestas. Pavyzdžiui, šioje komandoje:

cp -iv Trogdor2.mp3 ringtone.mp3

Pirmasis argumentas yra "Trogdor2.mp3", o antrasis argumentas yra "ringtone.mp3".

Žvelgiant atgal į mūsų scenarijų, mes galime pamatyti, kad mes remiame du argumentus:

Tai reiškia, kad paleisdami scenarijų turėsime pateikti du argumentus, kad scenarijus būtų tinkamai paleistas. Pirmasis argumentas, $ 1, yra failas, kuris bus nukopijuotas ir pakeistas kaip pirmasis argumentas komandos "cp -iv".

Antrasis argumentas, $ 2, veiks kaip tos pačios komandos išvesties failas. Tačiau jūs taip pat galite pamatyti, kad tai kitokia. Mes pridėjome laikotarpį ir nurodėme kintamąjį "date_formatted" aukščiau.Įdomu, ką tai daro?

Štai kas atsitinka, kai scenarijus paleidžiamas:

Jūs galite pamatyti, kad išvesties failas yra išvardytas kaip tas, ką aš įvedžiau už 2 $, po kurio eina laikotarpis, tada datos komandos išvestis!Žinai, ar ne?

Dabar, kai paleisiu komandą datecp, ji paleis šį scenarijų ir leis man kopijuoti bet kokį failą į naują vietą ir automatiškai pridėti datą ir laiką iki failo pavadinimo pabaigos. Naudinga archyvavimui!

"Shell" scenarijai yra jūsų sistemos veikimo pagrindas. Taip pat nereikia išmokti naujos programavimo kalbos. Išbandykite scenarijus su kai kuriomis pagrindinėmis komandomis namuose ir pradėkite galvoti, ką galite tai panaudoti.

Ar esate scenarijus? Ar turite patarimų naujokams? Pasidalykite savo mintimis į komentarus!Šioje serijoje yra daugiau!