Shell-skriptimise algajate juhend: põhitõed

Terminit „shelliskriptimine” mainitakse Linuxi foorumites sageli, kuid paljud kasutajad pole sellega tuttavad. Selle lihtsa ja võimsa programmeerimismeetodi õppimine aitab säästa aega, õppida paremini käsurida ja visata tüütuid failihalduse ülesandeid.

Mis on Shelli skriptimine?

Linuxi kasutajaks olemine tähendab, et mängite käsureal. Meeldib see teile või mitte, kuid selle liidese kaudu saab teha lihtsalt mõningaid asju, kui osutada ja klõpsata. Mida rohkem käsurida kasutada ja õppida, seda rohkem näete selle potentsiaali. Noh, käsurida ise on programm: kest. Enamik Linuxi distrosid kasutavad tänapäeval Bashi ja selleks sisestate tegelikult käske.

Nüüd võivad mõned teist, kes kasutasite Windowsi enne Linuxi kasutamist, mäletada pakettfaile. Need olid väikesed tekstifailid, mille täitmiseks võite täita käske ja Windows käivitas neid omakorda. See oli nutikas ja korralik viis mõne asja ajamiseks, näiteks mängude käivitamiseks keskkooli arvutilaboris, kui te ei saanud süsteemikaustu avada ega otseteid luua. Kuigi Windowsis olevad pakkfailid on kasulikud, on see kestskriptide odav imitatsioon.

Shelli skriptid võimaldavad meil programmeerida käske ahelates ja lasta süsteemil neid skriptitud sündmusena täita, nagu pakettfaile. Need võimaldavad ka palju kasulikumaid funktsioone, näiteks käskude asendamist. Võite käivitada käsu, näiteks kuupäeva, ja kasutada selle väljundit failinimede skeemi osana. Saate varukoopiaid automatiseerida ja igale kopeeritud failile võib selle nime lõppu lisada praeguse kuupäeva. Ka skriptid pole lihtsalt käskude kutsumised. Need on omaette programmid. Skriptimine võimaldab teil programmeerimisfunktsioone - näiteks tsükleid 'for', if / then / else lauseid jne - kasutada otse oma opsüsteemi liideses. Ja te ei pea teist keelt õppima, kuna kasutate juba teada olevat käsurida.

Ma arvan, et see on tõesti skriptimise jõud. Saate programmeerida juba tuttavate käskudega, õppides põhiosa programmeerimiskeeltest. Kas peate tegema midagi korduvat ja tüütut? Skriptige see! Kas vajate tõesti keeruka käsu otseteed? Skriptige see! Kas soovite ehitada millegi jaoks väga hõlpsasti kasutatava käsurea liidese? Skriptige see!

Enne alustamist

Enne skriptide seeria alustamist käsitleme mõnda põhiteavet. Kasutame bashi kesta, mida enamik Linuxi jaotusi kasutab loomupäraselt. Bash on saadaval ka Mac OS-i kasutajatele ja Cygwinile Windowsis. Kuna see on nii universaalne, peaksite saama skriptida olenemata oma platvormist. Lisaks võivad skriptid töötada seni, kuni kõik viidatud käsud on olemas, mitmel platvormil, kuid nende kohandamine pole vajalik.

Skriptimisel saab hõlpsasti kasutada administraatori või ülikasutaja privileege, seega on parem skripte enne nende tööle panemist testida. Kasutage ka tervet mõistust, näiteks veenduge, et teil oleks varukoopiaid failidest, millel soovite skripti käitada. Samuti on väga oluline kasutada käsku rm õigeid valikuid, näiteks –i, et teie suhtlus oleks vajalik. See võib ära hoida mõningaid vastikuid vigu. Sellisena lugege läbi allalaaditud skriptid ja olge oma andmetega ettevaatlik, igaks juhuks, kui asjad valesti lähevad.

Põhimõtteliselt on skriptid lihtsalt tekstifailid. Nende kirjutamiseks võite kasutada mis tahes tekstiredaktorit: gedit, emacs, vim, nano ... Seda loendit jätkatakse. Salvestage see kindlasti lihttekstina, mitte rikkaliku tekstina või Wordi dokumendina. Kuna mulle meeldib nano pakutav kasutusmugavus, siis kasutan seda.

Skripti load ja nimed

Skripte täidetakse nagu programme ja selleks peab neil olema õiged õigused. Skriptid saab käivitatavaks muuta, käivitades sellel järgmise käsu:

chmod + x ~ / somecrazyfolder / skript

See võimaldab kõigil seda konkreetset skripti käitada. Kui soovite piirata selle kasutamist ainult oma kasutajaga, võite selle asemel kasutada:

chmod u + x ~ / somecrazyfolder / skript

Selle skripti käivitamiseks peate CD õigesse kataloogi ja seejärel skripti käivitama järgmiselt:

cd ~ / somecrazyfolder

./script1

Asjade mugavamaks muutmiseks võite skriptid paigutada oma kodukataloogi kausta "bin":

~ / prügikast

Paljudes kaasaegsetes distros pole seda kausta enam vaikimisi loodud, kuid saate selle luua. Tavaliselt hoitakse siin käivitatavaid faile, mis kuuluvad teie kasutajale, mitte teistele kasutajatele. Skripte siia paigutades saate neid lihtsalt käivitada, tippides nende nime, nagu ka teistes käskudes, selle asemel, et peate CD-d ringi tegema ja kasutama eesliidet.

Enne skripti nimetamist peaksite siiski tegema järgmise käsu, et kontrollida, kas teil on seda nime kasutav programm installitud:

mis [käsk]

Paljud inimesed nimetavad oma varajasi skripte testiks ja kui nad proovivad seda käsureal käivitada, ei juhtu midagi. Seda seetõttu, et see on vastuolus testkäsklusega, mis ei tee argumentideta midagi. Alati veenduge, et teie skriptide nimed ei oleks käskudega vastuolus, vastasel juhul võite leida end tegevatest asjadest, mida te ei kavatse teha!

Skriptimise juhised

Nagu ma varem mainisin, on iga skriptifail sisuliselt lihttekst. See ei tähenda, et saaksite tahtmatult kirjutada seda, mida soovite. Kui tekstifaili üritatakse käivitada, analüüsivad kestad nende kaudu vihjeid selle kohta, kas need on skriptid või mitte, ja kuidas kõike õigesti käsitseda. Seetõttu peate teadma mõningaid juhiseid.

  1. Iga skript peaks olema "#! / Bin / bash"
  2. Iga uus rida on uus käsk
  3. Kommentaaririd algavad numbriga #
  4. Käske ümbritseb ()

Hash-Bang Hack

Kui kest parsib tekstifaili, on kõige otsem viis faili skriptina tuvastada, tehes oma esimese rea:

#! / bin / bash

Kui kasutate mõnda muud kestat, asendage selle tee siin. Kommentaariread algavad räsidega (#), kuid paugu (!) Ja kestatee lisamine pärast seda on omamoodi häkkimine, mis möödub sellest kommentaarireeglist ja sunnib skripti käivitama kestaga, millele see rida osutab.

Uus rida = uus käsk

Iga uut rida tuleks pidada uueks käsuks või suurema süsteemi komponendiks. Näiteks if / then / else laused võtavad üle mitu rida, kuid selle süsteemi iga komponent on uuel real. Ärge laske käsul järgmisele reale verd voolata, kuna see võib eelmist käsku kärpida ja järgmisele reale tõrke anda. Kui teie tekstiredaktor seda teeb, peaksite turvalisuse huvides teksti pakkimise välja lülitama. Võite nano-biti teksti mähkimise välja lülitada, vajutades ALT + L.

Kommenteerige sageli #-ga

Kui alustate joont #, ignoreeritakse rida. See muudab selle kommentaarireaks, kus saate endale meelde tuletada, mis oli eelmise käsu väljund või mida järgmine käsk teeb. Jällegi lülitage teksti mähkimine välja või jagage kommentaarid mitmeks reaks, mis kõik algavad räsi. Paljude kommentaaride kasutamine on hea tava, sest see võimaldab teil ja teistel inimestel teie skripte hõlpsamini nipistada. Ainus erand on eelmainitud Hash-Bangi häkkimine, nii et ärge järgige # s koos! S-ga. ;-)

Käskude ümber on sulgud

Vanematel päevadel tehti käskude asendused üksikute märkidega (`, jagab klahvi ~). Me ei hakka seda veel puudutama, kuid kuna enamik inimesi lähevad pärast põhitõdede õppimist avastama, on ilmselt hea mainida, et peaksite selle asemel kasutama sulge. Seda peamiselt seetõttu, et kui pesitsete - panete käske teiste käskude sisse -, toimivad sulgud paremini.

Teie esimene skript

Alustame lihtsast skriptist, mis võimaldab faile kopeerida ja failinime lõppu lisada kuupäevad. Nimetagem seda "datecp". Kõigepealt kontrollime, kas see nimi on millegagi vastuolus:

Näete, et käsku pole väljundit, nii et oleme kõik valmis seda nime kasutama.

Looge kausta ~ / bin tühi fail:

puudutage nuppu ~ / bin / datecp

Muutkem luba kohe, enne kui unustame:

Alustame siis oma stsenaariumi ülesehitamist. Avage see fail oma valitud tekstiredaktoris. Nagu ma ütlesin, meeldib mulle nano lihtsus.

nano ~ / bin / datecp

Ja jätkame ja sisestage esimene eeltingimus ja kommentaar selle skripti toimimise kohta.

Järgnevalt deklareerime muutuja. Kui olete kunagi algebrat kasutanud, teate tõenäoliselt, mis see on. Muutuja võimaldab meil teavet salvestada ja sellega asju ajada. Muutujad võivad mujal viidates „laieneda”. See tähendab, et oma nime kuvamise asemel kuvavad nad oma salvestatud sisu. Hiljem võite samale muutujale öelda erineva teabe salvestamiseks ja kõik pärast seda toimuvad juhised kasutavad uut teavet. See on tõeliselt uhke kohatäide.

Mida paneme muutuja välja? Noh, salvestame kuupäeva ja kellaaja! Selleks kutsume käsu kuupäev.

Käsu date väljundi loomiseks vaadake allolevat pilti:

Näete, et lisades erinevad muutujad, mis algavad tähega%, saate käsu väljundi muuta soovitud väärtuseks. Lisateabe saamiseks võite käsku date otsida käsiraamatu lehelt.

Kasutagem käsu kuupäev viimast iteratsiooni „kuupäev +% m_% d_% y-% H.% M.% S” ja kasutagem seda oma skriptis.

Kui me selle skripti kohe salvestaksime, saaksime selle käivitada ja see annaks meile käsu date väljundi, nagu me eeldaksime:

Tehkem aga midagi muud. Anname selle käsu jaoks muutuja nime, näiteks date_formatted. Selle õige süntaks on järgmine:

muutuja = $ (käsk –optsioonide argumendid)

Ja meie jaoks ehitaksime selle järgmiselt:

kuupäeva_vormindatud = $ (kuupäev +% m_% d_% y-% H.% M.% S)

Seda nimetame käsu asendamiseks. Põhimõtteliselt ütleme bashile, et alati, kui kuvatakse muutuja „date_formatted”, käivitada käsk sulgudes. Seejärel tuleks muutuja nime “date_formatted” asemel kuvada käskude mis tahes väljund.

Siin on skripti näidis ja selle väljund:

Pange tähele, et väljundis on kaks tühikut. Kuvatakse kaja käskude jutumärkides olev ruum ja muutuja ees olev ruum. Ärge kasutage tühikuid, kui te ei soovi, et need ilmuksid. Pange tähele ka seda, et ilma selle lisatud "kaja" reata ei annaks skript absoluutselt mingit väljundit.

Naaseme oma stsenaariumi juurde. Lisame järgmiselt käsu kopeerimise osa.

cp –iv $ 1 $ 2. $ date_formatted

See kutsub käsu kopeerima, kasutades valikuid –i ja –v. Esimene küsib enne faili ülekirjutamist teie kinnitust ja teine ​​kuvab käsureal olevad andmed.

Järgmisena näete, et olen lisanud valiku „$ 1”. Skriptimisel tähistab dollarimärk ($), millele järgneb number, seda skripti nummerdatud argumenti, kui see käivitati. Näiteks järgmises käsus:

cp –iv Trogdor2.mp3 helin.mp3

Esimene argument on “Trogdor2.mp3” ja teine ​​argument “ringtone.mp3”.

Vaadates oma skripti tagasi, näeme, et viidame kahele argumendile:

See tähendab, et skripti käivitamisel peame skripti õigeks käitamiseks esitama kaks argumenti. Esimene argument $ 1 on fail, mida kopeeritakse ja see asendatakse käsu „cp –iv” esimese argumendina.

Teine argument $ 2 toimib sama käsu väljundfailina. Kuid näete ka, et see on erinev. Oleme lisanud perioodi ja viidanud muutujale „date_formatted” ülalt. Kas soovite teada, mida see teeb?

Skripti käitamisel juhtub järgmine.

Näete, et väljundfail on loetletud mis iganes ma sisestasin $ 2 eest, millele järgneb punkt ja seejärel käsu date väljund! On loogiline, eks?

Nüüd, kui käivitan käsu datecp, käivitab see selle skripti ja võimaldab mul kopeerida kõik failid uude asukohta ning lisada failinime lõppu automaatselt kuupäev ja kellaaeg. Kasulik kraami arhiveerimiseks!

Shelli skriptimine on teie OS-i enda jaoks tööle panemise keskmes. Selle elluviimiseks ei pea õppima ka uut programmeerimiskeelt. Proovige kodus skripte mõne põhikäsuga ja hakake mõtlema, milleks seda kasutada.

Kas sa kirjutad? Kas teil on algajatele nõu? Jagage oma mõtteid kommentaarides! Selles sarjas on veel tulemas!