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

Turinys:

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

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

Video:
Video: TICWATCH PRO 5 Review: The BEST Wear OS Watch Yet?! // A Complete Guide 2024, Balandis
Anonim
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 pašalinti nuobodų failų valdymo užduotis.
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 pašalinti 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 prieš pradėdami naudoti "Linux" naudojo "Windows", 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 scenarijaus įvykį, 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 - pavyzdžiui, "for loop", if / then / else pareiškimus ir tt - tiesiai į operacinės sistemos sąsają. Ir jūs neturite išmokti kitos kalbos, nes naudojate tai, ką jau žinote: komandų eilutę.
"Shell" scenarijai leidžia mums programuoti komandas grandinėse ir sistemai juos vykdyti kaip scenarijaus įvykį, 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 - pavyzdžiui, "for loop", if / then / else pareiškimus ir tt - tiesiai į operacinės sistemos sąsają. Ir jūs neturite išmokti kitos kalbos, nes naudojate tai, ką jau žinote: komandų eilutę.

Manau, tai tikrai scenarijaus galia. Jūs gaunate programą su komandomis, kurias jau žinote, tuo pačiu metu mokydamiesi daugelio pagrindinių programavimo kalbų grupes. 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š tau pradedant

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.

Scripting gali lengvai pasinaudoti "administratoriaus" arba "superuserio" privilegijomis, todėl geriausia išbandyti scenarijus prieš pradėdami juos dirbti. 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, tik tuo atveju, jei viskas blogai.

Pagal jų esmę 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

Skriptai vykdomi kaip programos, o tam, kad tai įvyktų, jie turi turėti tinkamus leidimus. Galite padaryti scenarijus vykdomąjį, paleisdami šią komandą:

chmod +x ~/somecrazyfolder/script1

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

chmod u+x ~/somecrazyfolder/script1

Norėdami paleisti šį scenarijų, jums reikės cd į tinkamą katalogą ir paleisti scenarijų panašūs į šį:

cd ~/somecrazyfolder

./script1

Kad dalykai būtų patogesni, scenarijus galite įdėti į aplanką "bin", esantį jūsų namų kataloge:

~/bin

Daugelyje modernių distrosų šis aplankas nebėra sukurtas pagal numatytuosius nustatymus, 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ų, jūs turėtumėte šią komandą patikrinti, ar turite įdiegtą programą, kuri naudoja šį vardą:

which [command]

Daugelis žmonių pavadina savo ankstyvą scenarijų "testą", o kai bando paleisti jį komandinėje eilutėje, nieko neįvyksta. 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!

Scripting Guidelines

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.
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. Komandas supa ()

Hash-Bang Hack

Kai apvalkalas analizuojamas per teksto failą, pats tiesioginis būdas identifikuoti failą kaip scenarijų yra atliekant pirmąją eilutę:

#!/bin/bash

Jei naudojate kitą lukštą, 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 / tada / else teiginiai perims kelias eilutes, bet kiekviena šios 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.

Komentuoti 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 gairėmis

Senesnėse dienose komandų pakeitimai buvo atlikti su vienos žymos ženklais (`, dalijasi ~ raktą). 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:

Galite matyti, kad nėra tos komandos išvesties, todėl mes visi esame pasiruošę naudoti šį pavadinimą.
Galite matyti, kad nėra tos komandos išvesties, todėl mes visi esame pasiruošę naudoti šį pavadinimą.

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

touch ~/bin/datecp

Dabar pakeiskime leidimą, kol pamirsime:
Dabar pakeiskime leidimą, kol pamirsime:
Tada pradėkime kurti savo scenarijų. Atidarykite tą failą pasirinkto teksto redaktoriuje. Kaip sakiau, man patinka nano paprastumas.
Tada pradėkime kurti savo scenarijų. Atidarykite tą failą pasirinkto teksto redaktoriuje. Kaip sakiau, man patinka nano paprastumas.

nano ~/bin/datecp

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

Tada paskelbsime 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.
Tada paskelbsime 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ą.

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

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:
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:
Bet atliksime kažką kitokio. Pateikime kintamojo pavadinimą, pvz., Date formatted pagal šią komandą. Tinkama sintaksė yra tokia:

variable=$(command –options arguments)

Ir mums, mes jį pastatyti taip:

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

Image
Image

Tai yra tai, ką vadiname pakaitomis komandai. 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:

Image
Image
Atkreipkite dėmesį, kad išeinant 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.
Atkreipkite dėmesį, kad išeinant 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 scenarijaus. Leiskite dar kartą pridėti kopijavimo dalį komandą.

cp –iv $1 $2.$date_formatted

Tai atliks kopijavimo komandą su -i ir -v parinktimis. Pirmasis paprašys jūsų patvirtinti prieš perrašydamas failą, o pastarasis parodys, kas yra komandinėje eilutėje.
Tai atliks kopijavimo komandą su -i ir -v parinktimis. Pirmasis paprašys jūsų patvirtinti prieš perrašydamas failą, o pastarasis parodys, kas yra komandinėje eilutėje.

Tada galite pamatyti, 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 - "Trumpas.mp3".

Žvelgiant atgal į mūsų scenarijų, mes galime pamatyti, kad mes, remdamiesi dviem argumentais:

Tai reiškia, kad, paleidžiant scenarijų, mes turime pateikti du argumentus, kad scenarijus būtų tinkamai paleistas. Pirmasis argumentas, $ 1, yra failas, kuris bus nukopijuotas ir pakeistas kaip pirmasis argumentas komandai "komanda".
Tai reiškia, kad, paleidžiant scenarijų, mes turime pateikti du argumentus, kad scenarijus būtų tinkamai paleistas. Pirmasis argumentas, $ 1, yra failas, kuris bus nukopijuotas ir pakeistas kaip pirmasis argumentas komandai "komanda".

Antrasis argumentas, $ 2, veiks kaip tos pačios komandos išvesties failas. Bet taip pat galite pamatyti, kad tai kitokia. Mes pridėjome laikotarpį, o mes nurodėme "aukštyn kintamojo" pakeistą datos formą. Įdomu, ką tai daro?

Štai, kas atsitinka, kai scenarijus paleidžiamas:

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

Dabar, kai paleisiu komandą datecp, jis 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" scenarijus yra pagrindinis dalykas, kai jūsų OS veikia jums. Taip pat neturite išmokti naujos programavimo kalbos. Išbandykite scenarijus su kai kuriomis pagrindinėmis komandomis namuose ir pradėkite galvoti, ką galite tai panaudoti.

Ar tu scenarijus? Ar turite patarimų naujokams? Pasidalykite savo mintimis į komentarus! Yra dar daugiau šios serijos!

Rekomenduojamas: