Ang Gabay ng Nagsisimula sa Shell Scripting: Ang Mga Pangunahing Kaalaman
Ang terminong "shell scripting" ay madalas na nabanggit sa mga forum ng Linux, ngunit maraming mga gumagamit ang hindi pamilyar dito. Ang pag-aaral ng madali at makapangyarihang pamamaraan ng pagprogram na ito ay makakatulong sa iyong makatipid ng oras, matuto nang higit pa sa linya ng utos, at matanggal ang nakakapagod na mga gawain sa pamamahala ng file.
Ano ang Shell Scripting?
Ang pagiging isang gumagamit ng Linux ay nangangahulugang naglalaro ka sa linya ng utos. Gusto mo o hindi, may ilang mga bagay lamang na mas madaling magagawa sa pamamagitan ng interface na ito kaysa sa pagturo at pag-click. Ang mas ginagamit mo at natutunan ang linya ng utos, mas nakikita mo ang potensyal nito. Sa gayon, ang mismong linya ng utos ay isang programa: ang shell. Karamihan sa mga distrito ng Linux ngayon ay gumagamit ng Bash, at ito ang talagang inilalagay mong mga utos.
Ngayon, ang ilan sa iyo na gumamit ng Windows bago gamitin ang Linux ay maaaring matandaan ang mga file ng batch. Ito ay maliliit na mga file ng teksto na maaari mong punan ng mga utos upang maipatupad at ang Windows ay tatakbo sa pagliko nito. Ito ay isang matalino at maayos na paraan upang magawa ang ilang mga bagay, tulad ng pagpapatakbo ng mga laro sa iyong computer lab sa high school nang hindi mo mabuksan ang mga folder ng system o lumikha ng mga shortcut. Ang mga file ng batch sa Windows, habang kapaki-pakinabang, ay isang murang paggaya ng mga script ng shell.
Pinapayagan kami ng mga script ng shell na mag-program ng mga utos sa mga kadena at ipatupad ng system ang mga ito bilang isang kaganapan sa script, tulad ng mga file ng pangkat. Pinapayagan din nila ang mas maraming kapaki-pakinabang na pag-andar, tulad ng pagpapalit ng utos. Maaari kang humingi ng isang utos, tulad ng petsa, at gamitin ang output nito bilang bahagi ng isang scheme-naming na scheme. Maaari mong i-automate ang mga pag-backup at ang bawat nakopyang file ay maaaring naidugtong ang kasalukuyang petsa sa dulo ng pangalan nito. Ang mga script ay hindi lamang mga invocation ng mga utos, alinman. Ang mga ito ay mga programa sa kanilang sariling karapatan. Pinapayagan ka ng scripting na gumamit ng mga pagpapaandar sa programa - tulad ng mga ‘for’ loop, kung / pagkatapos / ibang pahayag, at iba pa - direkta sa loob ng interface ng iyong operating system. At, hindi mo kailangang matuto ng ibang wika dahil ginagamit mo ang alam mo na: ang command-line.
Iyon talaga ang lakas ng scripting, sa palagay ko. Makakakuha ka ng programa sa mga utos na alam mo na, habang natututo ng mga sangkap na hilaw ng karamihan sa mga pangunahing wika ng pagprograma. Kailangang gumawa ng isang bagay na paulit-ulit at nakakapagod? Script ito! Kailangan mo ng isang shortcut para sa isang talagang convoluted na utos? Script ito! Nais bang bumuo ng isang talagang madaling gamitin na interface ng command-line para sa isang bagay? Script ito!
Bago ka magsimula
Bago namin simulan ang aming serye sa pag-script, takpan muna natin ang ilang pangunahing impormasyon. Gagamitin namin ang bash shell, na ginagamit ng karamihan sa mga pamamahagi ng Linux nang natural. Magagamit ang Bash para sa mga gumagamit ng Mac OS at Cygwin sa Windows. Dahil napaka-universal ito, dapat ay makapag-script ka anuman ang iyong platform. Bilang karagdagan, hangga't mayroon ang lahat ng mga utos na isinangguni, ang mga script ay maaaring gumana sa maraming mga platform na hindi kinakailangan ng pag-aayos.
Madaling magagamit ng scripting ang mga pribilehiyong "administrator" o "superuser", kaya pinakamahusay na subukan ang mga script bago mo ito gumana. Gumamit din ng sentido komun, tulad ng pagtiyak na mayroon kang mga pag-backup ng mga file na tatakbo ka sa isang script. Mahalaga rin talaga na gamitin ang mga tamang pagpipilian, tulad ng –i para sa rm na utos, upang ang iyong pakikipag-ugnay ay kinakailangan. Maiiwasan nito ang ilang hindi magandang pagkakamali. Tulad ng naturan, basahin ang mga script na nai-download mo at mag-ingat sa data na mayroon ka, baka sakaling magkamali ang mga bagay.
Sa kanilang core, ang mga script ay simpleng mga file ng teksto lamang. Maaari mong gamitin ang anumang text editor upang isulat ang mga ito: gedit, emacs, vim, nano… Nagpapatuloy ang listahang ito. Tiyaking i-save lamang ito bilang simpleng teksto, hindi bilang mayamang teksto, o isang dokumento ng Word. Dahil mahal ko ang kadalian ng paggamit na ibinibigay ng nano, gagamitin ko iyon.
Mga Pahintulot sa Script at Mga Pangalan
Ang mga script ay naisakatuparan tulad ng mga programa, at upang mangyari ito kailangan nilang magkaroon ng wastong mga pahintulot. Maaari mong maisagawa ang mga script sa pamamagitan ng pagpapatakbo ng sumusunod na utos dito:
chmod + x ~ / somecrazyfolder / script
Papayagan nito ang sinuman na patakbuhin ang partikular na script. Kung nais mong paghigpitan ang paggamit nito sa iyong gumagamit lamang, maaari mo itong gamitin sa halip:
chmod u + x ~ / somecrazyfolder / script
Upang mapatakbo ang script na ito, kakailanganin mong mag-cd sa tamang direktoryo at pagkatapos ay patakbuhin ang script na tulad nito:
cd ~ / somecrazyfolder
./script1
Upang gawing mas maginhawa ang mga bagay, maaari kang maglagay ng mga script sa isang folder na "bin" sa iyong direktoryo sa bahay:
~ / basurahan
Sa maraming mga modernong distrito, ang folder na ito ay hindi na nilikha bilang default, ngunit maaari mo itong likhain. Ito ay karaniwang kung saan naka-imbak ang mga maipapatupad na file na pagmamay-ari ng iyong gumagamit at hindi sa ibang mga gumagamit. Sa pamamagitan ng paglalagay ng mga script dito, maaari mo lamang patakbuhin ang mga ito sa pamamagitan ng pagta-type ng kanilang pangalan, tulad ng iba pang mga utos, sa halip na mag-cd sa paligid at gamitin ang awtomatikong ‘./’.
Gayunpaman, bago mo pangalanan ang isang script, dapat mo ang sumusunod na utos upang suriin kung mayroon kang isang program na naka-install na gumagamit ng pangalang iyon:
alin [utos]
Maraming tao ang pinangalanan ang kanilang mga unang script na "pagsubok," at kapag sinubukan nilang patakbuhin ito sa linya ng utos, walang nangyari. Ito ay dahil sumasalungat ito sa utos ng pagsubok, na walang ginagawa nang walang mga pagtatalo. Palaging siguraduhin na ang iyong mga pangalan ng script ay hindi sumasalungat sa mga utos, kung hindi man maaari mong makita ang iyong sarili na gumagawa ng mga bagay na hindi mo balak gawin!
Mga Alituntunin sa Pag-script
Tulad ng nabanggit ko dati, ang bawat file ng script ay mahalagang payak na teksto. Hindi nangangahulugang maaari mong isulat kung ano ang gusto mo sa lahat ng gusto, gayunpaman. Kapag ang isang text file ay tinangka na maipatupad, ang mga shell ay mag-iisa sa kanila para sa mga pahiwatig kung ang mga ito ay script o hindi, at kung paano hawakan nang maayos ang lahat. Dahil dito, maraming mga alituntunin na kailangan mong malaman.
- Ang bawat iskrip ay dapat na may "#! / Bin / bash"
- Ang bawat bagong linya ay isang bagong utos
- Nagsisimula ang mga linya ng komento sa isang #
- Ang mga utos ay napapaligiran ng ()
Ang Hash-Bang Hack
Kapag nag-parse ang isang shell sa pamamagitan ng isang text file, ang pinaka direktang paraan upang makilala ang file bilang isang script ay sa pamamagitan ng paggawa ng iyong unang linya:
#! / bin / bash
Kung gagamit ka ng ibang shell, palitan ang landas nito dito. Ang mga linya ng komento ay nagsisimula sa mga hash (#), ngunit ang pagdaragdag ng bang (!) At ang landas ng shell pagkatapos nito ay isang uri ng pag-hack na lampasan ang panuntunang puna na ito at pipilitin ang script na magpatupad ng shell na itinuro ng linyang ito.
Bagong Linya = Bagong Utos
Ang bawat bagong linya ay dapat isaalang-alang ng isang bagong utos, o isang bahagi ng isang mas malaking system. Kung / pagkatapos / iba pa ang mga pahayag, halimbawa, ay kukuha ng maraming mga linya, ngunit ang bawat bahagi ng sistemang iyon ay nasa isang bagong linya. Huwag hayaan ang isang utos na dumugo sa susunod na linya, dahil maaari nitong maputol ang nakaraang utos at bigyan ka ng isang error sa susunod na linya. Kung ginagawa iyon ng iyong editor ng teksto, dapat mong i-off ang pagbabalot ng teksto upang maingat na ligtas. Maaari mong patayin ang pagbabalot ng teksto sa nano bit na tumatama sa ALT + L.
Komento ng madalas sa #s
Kung nagsisimula ka ng isang linya sa isang #, hindi papansinin ang linya. Ginagawa itong isang linya ng komento, kung saan maaari mong ipaalala sa iyong sarili kung ano ang output ng nakaraang utos, o kung ano ang gagawin ng susunod na utos. Muli, patayin ang pambalot ng teksto, o masira ang iyong puna sa maraming mga linya na nagsisimula ang lahat sa isang hash. Ang paggamit ng maraming mga puna ay isang mahusay na kasanayan na panatilihin, dahil hinahayaan ka nitong at ang ibang mga tao na mas madaling mai-tweak ang iyong mga script. Ang tanging pagbubukod ay ang nabanggit na hack ng Hash-Bang, kaya huwag sundin ang #s sa! S. ;-)
Ang Mga Utos ay Napapalibutan Ng Mga Magulang
Sa mga mas matatandang araw, ang mga pagpapalit ng utos ay ginawa gamit ang solong mga markang marka (`, ibinabahagi ang ~ key). Hindi pa kami makikipag-usap tungkol dito, ngunit habang ang karamihan sa mga tao ay pumupunta at nag-explore pagkatapos malaman ang mga pangunahing kaalaman, marahil isang magandang ideya na banggitin na dapat mong gamitin ang mga panaklong sa halip. Pangunahin ito sapagkat kapag pumugad ka - maglagay ng mga utos sa loob ng iba pang mga utos - mas gumagana ang panaklong.
Iyong Unang Iskrip
Magsimula tayo sa isang simpleng script na nagbibigay-daan sa iyo upang makopya ang mga file at idagdag ang mga petsa sa dulo ng filename. Tawagin natin itong "datecp". Una, suriin natin kung may salungat ang pangalang iyon sa isang bagay:
Maaari mong makita na walang output ng aling utos, kaya't nakatakda kaming lahat na gamitin ang pangalang ito.
Lumikha tayo ng isang blangko na file sa folder na ~ / bin:
pindutin ang ~ / bin / datecp
At, baguhin natin ang pahintulot ngayon, bago natin kalimutan:
Magsimula na tayong magtayo ng ating script pagkatapos. Buksan ang file na iyon sa iyong pagpipilian ng text editor. Tulad ng sinabi ko, gusto ko ang pagiging simple ng nano.
nano ~ / bin / datecp
At, magpatuloy tayo at ilagay sa paunang kinakailangan unang linya, at isang puna tungkol sa kung ano ang ginagawa ng script na ito.
Susunod, ideklara natin ang isang variable. Kung sakaling kumuha ka ng algebra, marahil alam mo kung ano iyon. Pinapayagan kami ng isang variable na mag-imbak ng impormasyon at gawin ang mga bagay dito. Ang mga variable ay maaaring "palawakin" kapag isinangguni sa ibang lugar. Iyon ay, sa halip na ipakita ang kanilang pangalan, ipapakita nila ang kanilang nakaimbak na mga nilalaman. Maaari mong sabihin sa paglaon ang parehong variable upang mag-imbak ng iba't ibang impormasyon, at anumang tagubiling magaganap pagkatapos nito ay gagamit ng bagong impormasyon. Ito ay talagang isang magarbong placeholder.
Ano ang ilalagay natin sa variable? Kaya, iimbak natin ang petsa at oras! Upang magawa ito, tatawag kami sa utos ng petsa.
Tingnan ang screenshot sa ibaba para sa kung paano mabuo ang output ng utos ng petsa:
Maaari mong makita na sa pamamagitan ng pagdaragdag ng iba't ibang mga variable na nagsisimula sa%, maaari mong baguhin ang output ng utos sa gusto mo. Para sa karagdagang impormasyon, maaari kang tumingin sa manu-manong pahina para sa utos ng petsa.
Gamitin natin ang huling pag-ulit ng utos ng petsa, "petsa +% m_% d_% y-% H.% M.% S", at gamitin iyon sa aming script.
Kung mai-save namin ang script na ito ngayon, maaari namin itong patakbuhin at bibigyan kami ng output ng utos ng petsa tulad ng inaasahan namin:
Ngunit, gumawa tayo ng ibang bagay. Magbigay tayo ng isang variable na pangalan, tulad ng date_formatted sa utos na ito. Ang tamang syntax para dito ay ang mga sumusunod:
variable = $ (command –options arguments)
At para sa amin, gagawin namin ito tulad nito:
date_formatted = $ (date +% m_% d_% y-% H.% M.% S)
Ito ang tinatawag nating pagpapalit ng utos. Mahalagang sinasabi namin sa bash na tuwing magpapakita ang variable na "date_formatted", upang patakbuhin ang utos sa loob ng panaklong. Pagkatapos, anumang output na ibinibigay ng mga utos ay dapat ipakita sa halip na ang pangalan ng variable, "date_formatted".
Narito ang isang halimbawa ng script at ang output nito:
Tandaan na mayroong dalawang puwang sa output. Ang puwang sa loob ng mga quote ng utos ng echo at ang puwang sa harap ng variable ay parehong ipinakita. Huwag gumamit ng mga puwang kung ayaw mong ipakita ang mga ito. Tandaan din na nang walang idinagdag na linya na "echo", ang script ay magbibigay ng walang output.
Bumalik tayo sa ating iskrip. Susunod na idagdag natin ang bahagi ng pagkopya ng utos.
cp –iv $ 1 $ 2. $ date_formatted
Itatawag nito ang command na kopya, kasama ang mga pagpipilian na –i at –v. Hihiling sa iyo ng nauna para sa pag-verify bago mag-o-overtake ng isang file, at ipapakita ng huli kung ano ang nasa linya ng command-line.
Susunod, makikita mong idinagdag ko ang pagpipiliang "$ 1". Kapag ang pag-script, ang isang dolyar na tanda ($) na sinusundan ng isang numero ay magpapahiwatig ng bilang na argumento ng script kapag ito ay tinawag. Halimbawa, sa sumusunod na utos:
cp –iv Trogdor2.mp3 ringtone.mp3
Ang unang argumento ay "Trogdor2.mp3" at ang pangalawang argument ay "ringtone.mp3".
Sa pagbabalik tanaw sa aming script, maaari naming makita na tumutukoy kami ng dalawang mga argumento:
Nangangahulugan ito na kapag pinatakbo namin ang script, kakailanganin naming magbigay ng dalawang mga argumento upang tumakbo nang tama ang script. Ang unang argumento, $ 1, ay ang file na makokopya, at papalitan bilang unang argumento ng command na "cp –iv".
Ang pangalawang argumento, $ 2, ay kikilos bilang output file para sa parehong utos. Ngunit, makikita mo rin na iba ito. Nagdagdag kami ng isang panahon at isinangguni namin ang variable na "date_formatted" mula sa itaas. Nagtataka sa anong ginagawa nito?
Narito kung ano ang mangyayari kapag naipatakbo ang script:
Maaari mong makita na ang output file ay nakalista bilang anumang ipinasok ko para sa $ 2, na sinusundan ng isang panahon, pagkatapos ay ang output ng petsa ng utos! May katuturan, tama?
Ngayon kapag pinatakbo ko ang utos ng datecp, tatakbo ang script na ito at papayagan akong kopyahin ang anumang file sa isang bagong lokasyon, at awtomatikong idagdag ang petsa at oras upang tapusin ang filename. Kapaki-pakinabang para sa pag-archive ng mga bagay-bagay!
Ang shell scripting ay nasa puso ng pagpapaandar sa iyong OS para sa iyo. Hindi mo kailangang malaman ang isang bagong wika sa pagprograma upang maganap ito, alinman. Subukang mag-iskrip gamit ang ilang pangunahing mga utos sa bahay at magsimulang mag-isip ng kung saan mo ito magagamit.
Nag script ka ba? Mayroon bang payo para sa mga bagong kasal? Ibahagi ang iyong mga saloobin sa mga komento! Mayroong higit pang darating sa seryeng ito!