Shell-skriptimise algaja juhend: põhitõed

Sisukord:

Shell-skriptimise algaja juhend: põhitõed
Shell-skriptimise algaja juhend: põhitõed

Video: Shell-skriptimise algaja juhend: põhitõed

Video: Shell-skriptimise algaja juhend: põhitõed
Video: Google Maps: The many dimensions of a modern map - YouTube 2024, Aprill
Anonim
Terminit "shell skriptid" mainitakse sageli Linuxi foorumites, kuid paljud kasutajad ei tunne seda. Selle lihtsa ja võimas programmeerimismeetodi õppimine aitab teil säästa aega, õppida käsurealt paremini ja eemaldada tüütu failihalduse ülesanded.
Terminit "shell skriptid" mainitakse sageli Linuxi foorumites, kuid paljud kasutajad ei tunne seda. Selle lihtsa ja võimas programmeerimismeetodi õppimine aitab teil säästa aega, õppida käsurealt paremini ja eemaldada tüütu failihalduse ülesanded.

Mis on Shelli skriptimine?

Olles Linuxi kasutaja, tähendab see, et sa mängid käsureaga. Nagu või mitte, on vaid mõni asi, mida on selle liidese kaudu palju hõlpsamini teha, kui juhtida ja klõpsates. Mida rohkem te kasutate ja õppite käsurealt, seda rohkem näete selle potentsiaali. Noh, käsurea ise on programm: shell. Enamik Linuxi distributsiooni kasutab täna Bashi ja selle kaudu sisestate käsud sisestama.

Nüüd, mõned, kes kasutasid Windowsit enne Linuxi kasutamist, võivad meeles pidada partiifaile. Need olid väikesed tekstifailid, mida võite täitmise käskudega täita ja Windows käivitas need omakorda. Kui te ei suutnud avada süsteemikaustu ega luua otseteid, oli see nutikas ja puhas viis mõnede asjade sooritamiseks, näiteks mängida oma keskkooli arvutiklassis. Windowsi partiifailid, mis on kasulikud, on odavad jäljendid shell skripte.

Shell-skriptid võimaldavad meil programmeerida käske ahelates ja käivitada süsteem kui scripted sündmus, nagu ka partitsioonifailid. Need võimaldavad ka palju kasulikumaid funktsioone, nagu käsu asendamine. Võite käsku käivitada, näiteks kuupäeva, ja kasuta seda väljastama failide nimetamise skeemi osana. Võite varundusi automatiseerida ja iga kopeeritud faili saab selle nime lõppu lisada praeguse kuupäeva. Skriptid ei ole ka käskude kutsed. Need on programmid iseenesest. Skriptimine võimaldab kasutada operatsioonisüsteemi liidest otseselt programmeerimisfunktsioone - näiteks loendite puhul, kui / siis / muud avaldusi jne. Ja te ei pea õppima mõnda teist keelt, sest kasutate seda, mida te juba teate: käsurealt.
Shell-skriptid võimaldavad meil programmeerida käske ahelates ja käivitada süsteem kui scripted sündmus, nagu ka partitsioonifailid. Need võimaldavad ka palju kasulikumaid funktsioone, nagu käsu asendamine. Võite käsku käivitada, näiteks kuupäeva, ja kasuta seda väljastama failide nimetamise skeemi osana. Võite varundusi automatiseerida ja iga kopeeritud faili saab selle nime lõppu lisada praeguse kuupäeva. Skriptid ei ole ka käskude kutsed. Need on programmid iseenesest. Skriptimine võimaldab kasutada operatsioonisüsteemi liidest otseselt programmeerimisfunktsioone - näiteks loendite puhul, kui / siis / muud avaldusi jne. Ja te ei pea õppima mõnda teist keelt, sest kasutate seda, mida te juba teate: käsurealt.

Ma arvan, et see on tõesti skriptimise võime. Saate programmeerida käskudega, mida juba teate, samal ajal kui õpivad kõige enam programmeerimiskeele. Kas peate tegema midagi korduvat ja tüütu? Script seda! Kas soovite otsekohe tõeliselt keerdse käskluse jaoks? Script seda! Kas soovite luua midagi hõlpsasti käsurealiidest? Script seda!

Enne alustamist

Enne kui hakkame oma skriptide seeriat alustama, vaatame põhiteavet. Me kasutame bash-kestat, mida enamus Linuxi distributsioone kasutab ennast. Bash on saadaval Mac OSi kasutajatele ja Cygwinile ka Windowsis. Kuna see on nii universaalne, peaksite saama skripti oma platvormist sõltumata. Lisaks, seni, kuni kõik viidatud käsklused on olemas, võivad skriptid töötada mitmel platvormil, mida nõutakse vähese häälestamisega.

Skriptid võivad hõlpsalt kasutada administraatori või administraatori õigusi, seega on kõige parem katsetada skripte enne nende tööle panemist. Samuti kasutage tervet mõistust, näiteks veenduge, et olete failide varukoopiaid, millega olete skripti käivitanud. Samuti on tõesti oluline kasutada õigeid valikuid, näiteks käsu r-i jaoks, nii et teie suhtlus on vajalik. See võib takistada mõned leinavad vigu. Sellisena loete läbi skripte, mida laadite alla, ja olge nende andmetega ettevaatlik, kui asjad lähevad valesti.

Südamikud on lihtsalt tekstifailid. Tekstiredaktori saab neile kirjutada: gedit, emacs, vim, nano … See nimekiri läheb edasi. Lihtsalt veenduge, et salvestate selle kui tavalise teksti, mitte rikasteksti või Wordi dokumendina. Kuna ma armastan nano pakutavat kasutuskõlblikkust, kasutan seda.

Skripti õigused ja nimed

Skriptid täidetakse nagu programmid, ja selleks peab neil olema õiged õigused. Te saate käivitavaid skripte teha, käivitades sellele järgmise käsu:

chmod +x ~/somecrazyfolder/script1

See võimaldab igal konkreetsel skriptil käivitada. Kui soovite piirata selle kasutamist ainult teie kasutajale, võite selle asemel kasutada:

chmod u+x ~/somecrazyfolder/script1

Selle skripti käivitamiseks peaksite cd olema õigesse kataloogi ja käivitage skript järgmiselt:

cd ~/somecrazyfolder

./script1

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

~/bin

Paljudes kaasaegsetes distrosides pole seda kausta enam vaikimisi loodud, kuid saate seda luua. See on tavaliselt käimasolevate failide salvestamine, mis kuuluvad teie kasutajale ja mitte teistele kasutajatele. Asetades skripte siin, saate neid lihtsalt käivitada, kirjutades nende nime, nagu ka teisi käske, selle asemel, et printida ja kasutada "./" eesliidet.

Enne skripti nime saamist peaksite järgima seda käsklust, et kontrollida, kas teil on olemas selline nimi, mis on installitud:

which [command]

Paljud inimesed nimetavad oma varasemate skriptide "test" ja kui nad püüavad käsku käivitada, ei juhtu midagi. Seda põhjusel, et see on vastuolus katsekäsuga, mis ei tee argumentidega midagi. Alati veenduge, et teie skripti nimed ei oleks käskudega vastuolus, vastasel juhul võib juhtuda, et teete asju, mida te ei kavatse teha!

Skriptimise juhised

Nagu ma varem mainisin, on iga skriptifail sisuliselt tavaline tekst.See ei tähenda siiski, et võite kirjutada seda, mida soovite kõikvõimalikult tühjalt. Kui tekstifaili üritatakse täita, siis karbid analüüsivad neid läbi viiside kohta, kas need on skriptid või mitte, ja kuidas kõik õigesti käidelda. Seetõttu on mõned juhised, mida pead teadma.
Nagu ma varem mainisin, on iga skriptifail sisuliselt tavaline tekst.See ei tähenda siiski, et võite kirjutada seda, mida soovite kõikvõimalikult tühjalt. Kui tekstifaili üritatakse täita, siis karbid analüüsivad neid läbi viiside kohta, kas need on skriptid või mitte, ja kuidas kõik õigesti käidelda. Seetõttu on mõned juhised, mida pead teadma.
  1. Iga skript peaks olema koos "#! / Bin / bash"
  2. Iga uus rida on uus käsk
  3. Kommentaari read algavad #
  4. Käsud on ümbritsetud ()

Hash-Bang Hack

Kui shell koondab tekstifaili, on kõige otsesem viis faili skripti tuvastamiseks teha oma esimene rida:

#!/bin/bash

Kui kasutate mõnda muud kotti, asenda see siin. Kommentaaride read algavad hashes'iga (#), kuid lisades pausi (!) Ja shelli tee pärast seda, kui see on mingi häkkimine, mis mööda seda kommentaari reeglit üritab ja sunnib skripti täitma shelliga, millele see joon näitab.

Uus rida = uus käsk

Iga uut rida tuleks pidada uueks käsuks või suurema süsteemi komponendiks. Näiteks juhul, kui / siis / muu avaldused võtab üle mitu rida, kuid selle süsteemi iga komponent on uues rida. Ärge laske käsklus ületada järgmisele reale, kuna see võib kärpida eelmist käsu ja anda teile järgmise rea vea. Kui teie tekstiredaktor seda teete, peate tekstiklaami väljalülitamiseks olema ohutu poolel. Teksti ümbermõõtu saab välja lülitada nano-bitise ALT + L-ga.

Kommentaar Sageli #s

Kui alustate # -ga joont, ignoreeritakse joont. See muudab selle kommentaarideks, kus saate meenutada endist eelmise käsu väljundit või seda, mida järgmine käsk teeb. Jällegi lülitage tekstivõre välja või katkestage kommenteerimine mitmesse rida, mis kõik algavad räsihinnaga. Palju kommentaare on hea tava hoida, kuna see võimaldab teil ja teistel inimestel hõlpsamini oma skripte muuta. Ainsaks erandiks on eespool nimetatud Hash-Bangi häkkimine, seega ärge järgige #s koos! Sga.;-)

Käsud ümbritsevad Parentheses

Vanematel päevadel käsk asendusi tehti ühe märgi märkidega (`, jagab ~ võtme). Me ei kavatse seda veel puudutada, kuid kuna enamik inimesi läheb ära ja uurivad põhiteadmiste õppimist, siis on ilmselt hea mõte mainida, et peaksite selle asemel kasutama sulgudes. See on peamiselt seetõttu, et kui pesad - pane käske teiste käskude sees - sulgud toimivad paremini.

Sinu esimene skript

Alustame lihtsa skriptiga, mis võimaldab kopeerida faile ja lisada kuupäevad failinime lõppu. Vaatame seda "datecp". Esmalt kontrollime, kas see nimi on midagi vastuolus:

Näete, et selle käsu väljund puudub, seega oleme kõik seadnud selle nime kasutamiseks.
Näete, et selle käsu väljund puudub, seega oleme kõik seadnud selle nime kasutamiseks.

Looge tühja faili kataloogis ~ / bin:

touch ~/bin/datecp

Ja muudame nüüd luba, enne kui me unustame:
Ja muudame nüüd luba, enne kui me unustame:
Nüüd hakkame oma skripti üles ehitama. Avage see fail valitud tekstiredaktorisse. Nagu ma ütlesin, mulle meeldib nano lihtsus.
Nüüd hakkame oma skripti üles ehitama. Avage see fail valitud tekstiredaktorisse. Nagu ma ütlesin, mulle meeldib nano lihtsus.

nano ~/bin/datecp

Ja laseme edasi ja paneme esialgse eelduse ja kommenteerime, mida see skript teeb.

Järgnevalt deklareerime muutuja. Kui olete kunagi võtnud algebra, siis ilmselt teate, mis see on. Muutuja võimaldab meil salvestada teavet ja teha asju sellega. Muutujad võivad "laiendada", kui viidatakse mujal. See tähendab, et nende nime kuvamise asemel kuvatakse nende salvestatud sisu. Võite hiljem öelda, et sama muutuja säilitab erinevat teavet ja kõik juhised, mis ilmuvad pärast seda, kasutavad uut teavet. See on tõesti meeldiv kohatäide.
Järgnevalt deklareerime muutuja. Kui olete kunagi võtnud algebra, siis ilmselt teate, mis see on. Muutuja võimaldab meil salvestada teavet ja teha asju sellega. Muutujad võivad "laiendada", kui viidatakse mujal. See tähendab, et nende nime kuvamise asemel kuvatakse nende salvestatud sisu. Võite hiljem öelda, et sama muutuja säilitab erinevat teavet ja kõik juhised, mis ilmuvad pärast seda, kasutavad uut teavet. See on tõesti meeldiv kohatäide.

Mida me paneme välja muutujaga? Pange tähele kuupäeva ja kellaaega! Selleks kutsume kuupäeva käsku.

Vaadake alljärgnevat ekraanipilti, kuidas luua kuupäeva käsu väljundit:

Kasutage seda kuupäeva käsku viimast iteratsiooni, "date +% m_% d_% y-% H.% M.% S" ja kasutage seda meie skriptis.

Kui me peaksime seda skripti kohe salvestama, võiksime seda käivitada ja see annaks meile kuupäeva käsu väljundi nagu oleksime eeldanud:
Kui me peaksime seda skripti kohe salvestama, võiksime seda käivitada ja see annaks meile kuupäeva käsu väljundi nagu oleksime eeldanud:
Image
Image

Kuid tegema midagi muud. Andke muutuja nimi, nagu date_formatted sellele käsule. Selle nõuetekohane süntaks on järgmine:

variable=$(command –options arguments)

Ja meie jaoks me ehitaksime seda järgmiselt:

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

Seda me nimetame käsku asendamiseks. Me sisuliselt ütleme bash, et alati, kui muutuja "date formatted" kuvatakse, käivitatakse sulgudes olev käsk. Siis tuleks muutuja nime asemel kuvada mis tahes väljund, mida käsklused annavad, "date formatted".
Seda me nimetame käsku asendamiseks. Me sisuliselt ütleme bash, et alati, kui muutuja "date formatted" kuvatakse, käivitatakse sulgudes olev käsk. Siis tuleks muutuja nime asemel kuvada mis tahes väljund, mida käsklused annavad, "date formatted".

Siin on näidisskript ja selle väljund:

Image
Image
Pange tähele, et väljundis on kaks tühikut. Mõlema echo käsku jutumärkide ruum ja muutuja ees paiknev ruum kuvatakse mõlemad. Ärge kasutage tühikuid, kui te ei soovi, et need kuvataks. Pange tähele, et ilma selle lisatud "echo" reanimata ei anna skript mingit väljundit.
Pange tähele, et väljundis on kaks tühikut. Mõlema echo käsku jutumärkide ruum ja muutuja ees paiknev ruum kuvatakse mõlemad. Ärge kasutage tühikuid, kui te ei soovi, et need kuvataks. Pange tähele, et ilma selle lisatud "echo" reanimata ei anna skript mingit väljundit.

Läheme tagasi meie skripti. Järgmisena lisage käsu kopeerimise osa.

cp –iv $1 $2.$date_formatted

See käivitab kopeerimise käskluse, kasutades -i ja -v valikuid. Esimene palub teil kontrollida enne faili ülekirjutamist ja viimane näitab, mis käsureal on.
See käivitab kopeerimise käskluse, kasutades -i ja -v valikuid. Esimene palub teil kontrollida enne faili ülekirjutamist ja viimane näitab, mis käsureal on.

Järgmisena näete, et olen lisanud võimaluse "$ 1".Kui skriptid, siis tähistab dollar tähis ($), millele järgneb number, selle skripti nummerdatud argumendi, kui see on kutsutud. Näiteks järgmises käskluses:

cp –iv Trogdor2.mp3 ringtone.mp3

Esimene argument on "Trogdor2.mp3" ja teine argument on "Ärrington.mp3".

Vaadates meie skripti tagasi, näeme, et me viitame kahel argumendil:

See tähendab, et kui käitame skripti, peame esitama kaks argumenti, et skript õigesti töötada. Esimene argument, $ 1, on fail, mida kopeeritakse ja asendatakse asemel esimese käsuga käsu "Cp".
See tähendab, et kui käitame skripti, peame esitama kaks argumenti, et skript õigesti töötada. Esimene argument, $ 1, on fail, mida kopeeritakse ja asendatakse asemel esimese käsuga käsu "Cp".

Teine argument, $ 2, toimib sama käsu väljundfailina. Kuid võite ka näha, et see on erinev. Me lisasime perioodi ja me viitasime muutujale "DATE_FORMATSIOONID" ülalt. Kas see on huvitav?

Siin, mis juhtub siis, kui skript käivitatakse:

Näete, et väljundfail on loetletud nii, nagu ma sisestasin $ 2 jaoks, millele järgneb ajavahemik, siis kuupäevakäsu väljund! Kas see on mõistlik, eks?
Näete, et väljundfail on loetletud nii, nagu ma sisestasin $ 2 jaoks, millele järgneb ajavahemik, siis kuupäevakäsu väljund! Kas see on mõistlik, eks?

Nüüd, kui käivitan datecp käsku, käivitab see selle skripti ja lubab mul kopeerida kõik failid uude asukohta ja lisada automaatselt faili nime kuupäev ja kellaaeg lõpuni. Kasulik vara arhiveerimiseks!

Shell-skriptimine on teie operatsioonisüsteemi töö tegemisel teie jaoks kõige olulisem. Samuti ei pea te õppima uut programmeerimiskeele, et see juhtuks. Proovige skripte mõne põhikäsuga kodus ja hakake mõtlema, mida saate seda kasutada.

Kas sa stsenaariumi? Kas teil on nõuandeid algajatele? Jagage oma mõtteid kommentaarides! Seal on veel see seeria!

Soovitan: