23Aug

Shell Scripting iesācēju rokasgrāmata: pamati

Termins "shell shelling" bieži tiek minēts Linux forumos, taču daudzi lietotāji to nav pazīstami.Šī vienkāršā un spēcīgā programmēšanas metode var palīdzēt jums ietaupīt laiku, labāk mācīt komandrindu un izraidīt garlaicīgus failu pārvaldības uzdevumus.

Kas ir Shell skripti?

Būt Linux lietotājam nozīmē, ka jūs spēlējat ar komandrindu. Tāpat kā tas vai ne, ir tikai dažas lietas, kuras tiek padarītas daudz ērtāk caur šo saskarni, nevis norādot un noklikšķinot. Jo vairāk jūs izmantojat un apgūstat komandrindu, jo vairāk jūs redzat tā potenciālu. Nu, komandrindā pati par sevi ir programma: čaula. Lielākā daļa Linux disku mūsdienās izmanto Bash, un tieši tā jūs patiešām ievadāt komandas.

Tagad daži no jums, kas pirms Windows izmantošanas izmantojuši Windows, var atcerēties partijas failus. Tie bija mazi teksta faili, kurus jūs varat aizpildīt ar izpildāmām komandām, un Windows tos darbosies pēc kārtas. Tas bija gudrs un veikls veids, kā iegūt dažas lietas, piemēram, palaist spēles jūsu vidusskolas datoru laboratorijā, kad nevarēja atvērt sistēmas mapes vai izveidot īsceļus. Sērijveida faili operētājsistēmā Windows, kaut arī noderīgi, ir lēti šifrēšanas skriptu imitācija.

Shell skripti ļauj programmēt komandas ķēdēs, un sistēma tos izpilda kā scenāriju notikumu, tāpat kā partijas failus. Tās arī ļauj daudz noderīgākas funkcijas, piemēram, komandu aizstāšana. Varat atsaukties uz komandu, piemēram, datumu, un izmantot to kā daļu no failu nosaukšanas shēmas. Varat automātiski izveidot dublējumkopijas, un katram kopētam failam var pievienot pašreizējā datuma vārda beigās. Skripti ir ne tikai komandu izsaukumi. Viņi ir programmas pašas par sevi. Scripting ļauj izmantot operētājsistēmas saskarnes programmēšanas funkcijas - tādas kā cilpas "for", /then/ citus paziņojumus utt. Un jums nav iemācīties citu valodu, jo jūs izmantojat to, ko jau zināt: komandrindā.

Tas ir patiešām skriptu jauda, ​​es domāju. Jūs saņemat programmu ar komandām, kuras jūs jau zināt, vienlaikus mācot lielāko daļu programmēšanas valodu. Vai jādara kaut kas atkārtots un garlaicīgs? Script to! Nepieciešama saīsne patiešām viltīgai komandai? Script to! Vai vēlaties izveidot kaut ko ļoti vienkāršu komandrindas saskarni? Script to!

Pirms sākat

Pirms mēs sākam mūsu skriptu sēriju, apskatīsim kādu pamatinformāciju. Mēs izmantosim bash apvalku, kuru visbiežāk Linux sadali izmanto natively. Bash ir pieejams arī Mac OS lietotājiem un Cygwin arī operētājsistēmā Windows. Tā kā tas ir tik universāls, jums jāspēj skripts neatkarīgi no jūsu platformas. Turklāt, tik ilgi, kamēr pastāv visas norādītās komandas, skripti var darboties vairākās platformās ar mazu nepieciešamo tweaking.

skripti var viegli izmantot administratora vai administratora privilēģijas, tāpēc vislabāk ir pārbaudīt skriptus, pirms jūs tos ievietojat darbā.Izmantojiet arī veselo saprātu, piemēram, pārliecinieties, vai esat izveidojis dublējumkopijas no failiem, kurus jūs gatavojaties palaist skriptu. Ir arī ļoti svarīgi izmantot pareizās opcijas, piemēram, -i komandu rm, lai jūsu mijiedarbība būtu nepieciešama. Tas var novērst dažas neparastu kļūdas. Tādā veidā lasiet skriptus, kurus lejupielādējat, un esiet piesardzīgs ar datiem, kas jums ir, tikai gadījumā, ja viss notiek nepareizi.

Pēc būtības skripti ir vienkārši teksta faili. Jūs varat izmantot jebkuru teksta redaktoru, lai tos rakstītu: gedit, emacs, vim, nano. .. Šis saraksts turpinās. Vienkārši noteikti saglabājiet to kā vienkāršu tekstu, nevis bagātinātu tekstu vai Word dokumentu. Tā kā man patīk lietošanas ērtums, ko sniedz nano, es to izmantošu.

skriptu atļaujas un vārdi

skripti tiek izpildīti tāpat kā programmas, un, lai tas notiktu, tiem ir jābūt pareizām atļaujām. Jūs varat izveidot izpildāmos skriptus, izpildot šādu komandu:

chmod + x ~ /somecrazyfolder/ script1

Tas ļaus ikvienam palaist šo konkrēto skriptu. Ja vēlaties ierobežot tā lietošanu tikai savam lietotājam, to varat izmantot:

chmod u + x ~ /somecrazyfolder/ script1

Lai palaistu šo skriptu, jums vajadzētu cd nokļūt pareizajā direktorijā un pēc tam palaist skriptu kā šis:

cd ~ / somecrazyfolder

. /script1

Lai padarītu lietas ērtāku, jūs varat ievietot skriptus savā domēna direktorijā esošā mapē "bin":

~ / bin

Daudzās mūsdienu distros šī mape vairs netiek izveidota pēc noklusējuma, bet jūs to varat izveidot. Parasti parasti tiek turēti izpildāmie faili, kas pieder jūsu lietotājam, nevis citiem lietotājiem. Novietojot skriptus šeit, jūs varat vienkārši palaist tos, ierakstot savu vārdu, tāpat kā citas komandas, nevis cd ap to un izmantot prefiksu. /

Pirms jūs nosaucat skriptu, jums vajadzētu šādu komandu, lai pārbaudītu, vai jums ir instalēta programma, kas izmanto šo nosaukumu:

, kas [komanda]

Daudzi cilvēki nosauc savu agrīno skriptu "testu" un mēģinapalaist to komandrindā, nekas nenotiek. Tas ir tāpēc, ka tas ir pretrunā ar testa komandu, kas nedara neko bez argumentiem. Vienmēr pārliecinieties, ka jūsu skriptu nosaukumi nav pretrunā ar komandu, pretējā gadījumā jūs varat atrast sev lietas, ko nevēlaties darīt!

skriptu vadlīnijas

Kā jau minēju iepriekš, katrs skripta fails ir būtībā vienkāršs teksts. Tas nenozīmē, ka jūs varat rakstīt to, ko jūs vēlaties visu viltīgi-nilly, though. Kad teksta fails tiek mēģināts izpildīt, čaulas analizēs tos, lai uzzinātu, vai tie ir skripti vai nav, un kā pareizi rīkoties. Tāpēc ir dažas vadlīnijas, kas jāzina.

  1. Katram skriptam jābūt ar "#!/bin/ bash "
  2. Katra jaunā rindiņa ir jauna komanda
  3. Komentāru rindas sākas ar #
  4. Komandas ieskauj()

Hash-Bang Hack

Kad apvalks parsē caur teksta failu, vistiešākais veids, kā identificēt failu kāskripts ir padarot savu pirmo rindu:

#!/bin/ bash

Ja jūs izmantojat citu čaulu, šeit mainiet savu ceļu. Komentāru rindiņas sākas ar hashes( #), bet tiek pievienots sprādziens( !) Un apvalka ceļš pēc tam, kad tas ir sava veida hack, kas apiet šo komentāru noteikumu un piespiedīs skriptu izpildīt ar apvalku, uz ko rinda norāda.

Jauna līnija = Jauna komanda

Katru jauno rindu uzskata par jaunu komandu vai lielākas sistēmas sastāvdaļu. Piemēram, ja citādi /then/ paziņojumi pārņems vairākas rindas, bet katras sistēmas sastāvdaļa ir jaunā rindā.Neļaujiet komandai pārsniegt nākamo rindu, jo tas var saīsināt iepriekšējo komandu un radīt kļūdas nākamajā rindā.Ja jūsu teksta redaktors to dara, jums vajadzētu izslēgt teksta aplaušanu drošā pusē.Teksta iesaiņojumu var izslēgt ar nano bitu pogām ALT + L.

Komentārs Bieži ar #s

Ja sākat rindu ar #, rinda tiek ignorēta. Tas to pārvērš par komentāru rindiņu, kur jūs varat atgādināt sev par to, kāda bija iepriekšējās komandas izeja vai kāda būs nākamā komanda. Vēlreiz izslēdziet teksta iesaiņošanu vai pārtraucat komentēt vairākas rindas, kuras visas sākas ar hash. Izmantojot daudz komentāru, ir laba prakse saglabāt, jo tā ļauj jums un citiem lietotājiem tweak jūsu skripti vieglāk. Vienīgais izņēmums ir iepriekš minētais Hash-Bang hack, tādēļ neizmantojiet #s with! S.;-)

komandas ieskauj parastiem cilpām

Vecākajās dienās komandu aizstāšana tika veikta ar vienas zīmes atzīmēm( `, dalās taustiņā ~).Mēs par to vēl neieskatīsimies, taču, tā kā lielākā daļa cilvēku aiziet un izpēti pēc pamatu apgūšanas, visticamāk ir lietderīgi minēt, ka vietā vajadzētu izmantot iekavas. Tas ir galvenokārt tādēļ, ka tad, kad jūs ligzdo - ielieciet komandas citās komandās - iekavās darbojas labāk.

Jūsu pirmais skripts

Sāksim ar vienkāršu skriptu, kas ļauj kopēt failus un pievienot datumus līdz faila nosaukuma beigām. Nosauksim to par "datecp".Vispirms pārbaudīsim, vai šis vārds ir pretrunā ar kaut ko:

Jūs varat redzēt, ka nav izejas no šīs komandas, tāpēc mēs visi esam iestatījuši lietot šo vārdu.

Izveidojiet tukšu failu mapē ~ / bin:

touch ~ /bin/ datecp

Un ļaujiet mums mainīt atļauju tūlīt, pirms mēs aizmirstam:

Tad sākam veidot savu skriptu. Atveriet šo failu izvēlētajā teksta redaktorā.Kā jau teicu, man patīk nano vienkāršība.

nano ~ /bin/ datecp

Un ejiet tālāk un ievietojiet priekšnoteikumu pirmā rindā un komentārus par to, ko šis skripts dara.

Pēc tam atkārtoti paziņojam mainīgo. Ja esat kādreiz izdarījis algebru, jūs droši vien zināt, kas tas ir. Mainīgais ļauj mums saglabāt informāciju un ar to rīkoties. Mainīgie lielumi var "paplašināties", kad citur minēti. Tas nozīmē, ka tā vietā, lai parādītu viņu vārdu, viņi parādīs to saglabāto saturu. Varat vēlāk pateikt to pašu mainīgo, lai saglabātu dažādu informāciju, un pēc jebkuras instrukcijas, kas tiks izmantota, tiks izmantota jauna informācija. Tas ir ļoti iecienīts vietņu turētājs.

Ko mēs iekļausim mainīgo? Nu, glabājam datumu un laiku! Lai to izdarītu, mēs pieprasīsim datuma komandu.

Apskatiet zemāk redzamo ekrānuzņēmumu, kā izveidot datuma komandas izvadi:

Jūs varat redzēt, ka, pievienojot dažādus mainīgos, kas sākas ar%, jūs varat mainīt komandas izvadi uz to, ko vēlaties. Lai iegūtu plašāku informāciju, varat apskatīt datuma komandas manuālo lapu.

Izmantosim šo pēdējo atkārtojuma datuma komandu, "date +% m_% d_% y-% H.% M.% S", un izmantojiet to mūsu skriptā.

Ja mēs šobrīd būtu saglabājuši šo skriptu, mēs varētu to palaist, un tas dos mums datuma komandas izvadi, kā mēs sagaidām:

Bet darīsim kaut ko citu. Apzīmēsim mainīgo nosaukumu, piemēram, date_formatted uz šo komandu.

mainīgais = $( komandas variantu argumenti)

Un mums tas būtu jāveido šādi:

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

Tas ir tas, ko mēs saucam par komandu aizstāšanu. Mēs būtībā sakām bash, ka vienmēr, kad parādās mainīgais "date_formatted", komandu palaist iekšpusē iekavās. Tad neatkarīgi no izejas, ko dod komandas, vajadzētu norādīt mainīgā nosaukuma vietā "date_formatted".

Šeit ir piemēra skripts un tā izlaide:

Ņemiet vērā, ka produkcijā ir divas atstarpes. Abas ir atstarpes echo komandas pēdiņās un atstarpe priekš mainītāja. Neizmantojiet atstarpes, ja nevēlaties, lai tās parādās. Tāpat ņemiet vērā, ka bez šīs pievienotās "echo" rindas skripts nedotu absolūti nekādu rezultātu.

Atgriezīsimies pie mūsu skripta. Nākamajā vietā pievienosim komandas kopēšanas daļu.

cp -iv $ 1 $ 2. $ date_formatted

Tas izmantos komandu kopiju ar -i un -v opcijām. Pirmais lūgs jums pārbaudīt pirms faila pārrakstīšanas, un pēdējais parādīs to, kas ir uz leju par komandrindu.

Tālāk jūs varat redzēt, ka esmu pievienojis opciju "$ 1".Skriptu gadījumā dolāra zīme( $), kam seko skaitlis, apzīmē skripta numurēto argumentu, kad tas tika atsaukts. Piemēram, šādā komandā:

cp -iv Trogdor2.mp3 ringtone.mp3

Pirmais arguments ir "Trogdor2.mp3", un otrais arguments ir "ringtone.mp3".

Atskatoties uz mūsu skriptu, mēs varam redzēt, ka mēs atsaucam divus argumentus:

Tas nozīmē, ka, palaižot skriptu, mums būs jāsniedz divi argumenti, lai skripts darbotos pareizi. Pirmais arguments, $ 1, ir fails, kas tiks kopēts, un tas tiek aizstāts ar pirmā komandas "cp -iv" argumentu.

Otrais arguments, $ 2, darbosies kā izejas fails vienai komandai. Bet jūs varat arī redzēt, ka tas ir savādāk. Mēs esam pievienojuši periodu, un mēs esam minēti no augšminētā mainīgā elementa "date_formatted".Interesanti par to, ko tas dara?

Lūk, kas notiek, kad skripts tiek palaists:

Jūs varat redzēt, ka izvades fails ir uzskaitīts kā viss, ko esmu ievadījis par 2 $, kam seko periods, tad datuma komandas izlaide! Vai ir jēga, vai ne?

Tagad, kad es palaistu datecp komandu, tas palaistu šo skriptu un ļauj man kopēt visus failus uz jaunu atrašanās vietu un automātiski pievienot datuma un laika beigām filename. Noderīga arhivēšanai!

Shell skripti ir centrā, lai padarītu jūsu OS darbu jums. Vai nu tas nav nepieciešams, lai iemācītos jaunu programmēšanas valodu. Mēģiniet skriptus ar dažām pamata komandām mājās un sāciet domāt par to, ko jūs varat to izmantot.

Vai jūs esat skripts? Vai kāds padoms iesācējiem? Dalieties savās domās komentāros!Šajā sērijā ir vairāk!