Tässä opetusohjelmassa kerrotaan, miten voit helposti kirjoittaa omia Bash-skriptejä Linuxissa.

Järjestelmänvalvojana suoritat todennäköisesti toistuvia tehtäviä, jotka voitaisiin automatisoida.

Sinun onneksi on olemassa ohjelmointikieli, jota voi käyttää Linuxissa skriptien kirjoittamiseen : Bash-ohjelmointikieli.

Bashin avulla voit ajoittaa kokonaisia järjestelmän varmuuskopioita määrittelemällä Bash-skripteihin niin monta komentoa kuin haluat.

Voit myös tehdä mukautettuja skriptejä, jotka luovat ja poistavat käyttäjiä ja poistavat niihin liittyviä tiedostoja.

Bashin avulla voit myös saada skriptejä suoritettavaksi ja dumppaamaan hyödyllisiä suorituskykymittareita tiedostoon tai tietokantaan.

Bash on erittäin tehokas ohjelmointikieli järjestelmänvalvojille.

Tämänpäiväisessä opetusohjelmassa opettelemme kaikki perusasiat, joita Bashista on tiedettävä : miten skriptejä luodaan ja ajetaan, miten muuttujia ja komentotulkin sisäänrakennettuja osia käytetään tehokkaasti.

Sisällysluettelo

Mitä opit

Jos luet tämän opetusohjelman loppuun asti, opit seuraavat Bashiin liittyvät käsitteet

  • Miten Bash-skriptejä luodaan ja ajetaan komentorivin avulla;
  • Mitä shebang on ja miten sitä käytetään Linuxissa skriptien kirjoittamiseen;
  • Mitä shell built-ins ovat ja miten ne eroavat tavallisista järjestelmäohjelmista;
  • Miten Bash-muuttujia käytetään ja mitä erikoismuuttujat ovat;
  • Miten Bash-komentojen korvaamista käytetään;
  • Kuinka käytät yksinkertaisia IF-lausekkeita Bashissa;

Kuten huomaat, tämä on melko pitkä ohjelma, joten aloitetaan ilman muuta katsomalla, miten voit luoda ja ajaa Bash-skriptejä.

Aloittaminen Bashin kanssa

Ennen komentojen antamista kerrotaan lyhyesti Bashin ja Shellin yhteisestä historiasta.

Bashin historia

Bashin ensimmäinen versio Bash-selaimesta julkaistiin vuonna 1989 Brian Foxin toimesta, ja se on avoimen lähdekoodin toteutus Unix-selaimesta.

Taannoin, kun Unix-järjestelmiä alkoi syntyä, tällaiset järjestelmät käyttivät tavallisia Unix-kuoria, joita kutsuttiin Bourne-kuoriksi.

Kuva LinuxJournalista

Unixin alkuaikoina MIT:n tai Bell Labsin kaltaisten yhtiöiden kehittämät järjestelmät eivät olleet ilmaisia eivätkä avoimen lähdekoodin järjestelmiä.

Kaikkakin näille työkaluille tarjottiin dokumentaatiota, tuli GNU-aloitteelle (jota johti Richard Stallman) ensisijaiseksi tavoitteeksi saada oma versio Unix-kuoresta.

Kuusi vuotta sen jälkeen, kun GNU-projekti oli julkistettu, syntyi Bash (Bourne-Again Shell) -kuori, jossa on vielä enemmän ominaisuuksia kuin alkuperäisessä Bourne-kuoressa.

Bash-ohjelmointikieli

Kun työskennellään Linuxin kaltaisella Unixin kaltaisella systeemillä kuten Linux:lla, on muotoon Bashilla tavallisesti kaksi tarkoitusta :

  • Bash on komentorivitulkki eli toisin sanoen Unixin komentotulkki. Se tarkoittaa, että aina kun avaat päätelaitteen, edessäsi on Unixin komentotulkki, joka useimmiten on Bash-komentotulkki.

Kun kirjoitat komentoja suoraan päätelaitteeseen, komennot tulkitaan komentotulkissa, ne suoritetaan järjestelmäkutsujen avulla ja paluuarvot annetaan takaisin loppukäyttäjälle.

Jos et ole varma käyttämästäsi tulkista, SHELL-ympäristömuuttuja kertoo, mitä komentotulkkia parhaillaan käytät.

$ printenv SHELL

Kuten huomaat, tässä tapauksessa työskentelemme oikein Bash-komentotulkilla.

On tärkeää huomata, että vaikka termejä kuten ”Bash-skriptaaminen” ja ”Shell-skriptaaminen” käytetään vaihtelevasti, ne eivät välttämättä todellisuudessa kuvaa samaa asiaa jakelustasi riippuen.

Joissain uusimmissa jakeluissa (kuten Debian 10:ssä) on symboliset linkit alkuperäisestä Bourne-shellistä (nimeltä sh) niiden omiin shell-toteutuksiin (tässä tapauksessa Dash tai Debian Almquist shell)

  • Bash kuvaa myös komentorivikieltä ja siihen viitataan myös nimellä Bash-kieli. Bash paljastaa joukon operaattoreita ja operandeja, joita voidaan käyttää joidenkin perusominaisuuksien, kuten putkituksen tai useiden komentojen suorittamisen kerralla, saamiseksi.

Toteuttaessasi joitakin perusputkistoja olet tottunut työskentelemään ”|”-symbolin kanssa. Tämä symboli on osa Bash-komentorivikieltä.

Sama logiikka pätee myös ”&&”-symboliin, joka suorittaa toisen komennon, jos ja vain jos ensimmäinen komento onnistui.

$ command1 && command2

Luo ja suorita Bash-skriptejä

Nyt kun sinulla on hieman taustatietoa Bash-kuoresta ja Bash-komentorivikielestä, aloitetaan luomalla ja suorittamalla yksinkertaisia Bash-skriptejä.

Luoaksesi ensimmäisen Bash-skriptisi, luo yksinkertaisesti tiedosto nimeltä ”script.sh”.

Kuten varmaan jo huomasitkin, käytämme edelleen ”sh”-päätettä, jolla viitataan alkuperäiseen Bourne-ulkosuorittimeen (jota merkitään myös nimellä sh).

$ touch script.sh

Nyt ”sh”-päätteisen tiedoston luominen ei riitä siihen, että komentosarjaa pidetään Shell-skriptinä.

Voit itse asiassa nähdä, että tiedostoasi ei vielä pidetä shell-skriptinä ajamalla komennon file.

$ file script.sh

Niin kuin tässä näkyy, tiedostosi on kuvattu vain yksinkertaiseksi tyhjäksi tiedostoksi.

Jotta tiedostosi kuvattaisiin komentosarjatiedostoksi, sinun on määritettävä shebang-rivi tiedostosi alkuun.

Komentosarjan määrittäminen shebangin avulla

Jos olet käyttänyt Linuxia jo jonkin aikaa, on hyvin todennäköistä, että olet jo törmännyt shebang-riviin tiedostosi alussa.

Shebang, lyhenne sanoista ”Hash + ”Bang”, on komentosarjakomentosarjojen alkuun asetettava yksirivinen rivi, jolla määritetään, mitä komentosarjakomentosarjaa käytetään tämän komentosarjan tulkintaan.

#!/bin/<shell>

Tapauksessamme haluamme työskennellä Bash-komentosarjojen kanssa. Toisin sanoen haluamme, että skriptimme tulkitaan Bash-tulkilla.

Tulkin polun määrittämiseksi voit käyttää komentoa ”which”.

$ which bash/bin/bash

Nyt kun tiedät tulkin polun, muokkaa skriptitiedostoa ja lisää shebang-rivi tiedoston alkuun.

#!/bin/bash

Nyt kun olet lisännyt tämän rivin tiedostosi alkuun, suorita uudelleen komento ”file” nähdäksesi eron.

Kuten huomaat, ulostulo on hiukan erilainen : tällä kertaa komentosarjasi näyttäytyy ”Bourne-Again shell-skriptinä” ja mikä tärkeämpää, suoritettavana tiedostona.

Mitä tapahtuisi, jos et määrittäisi shebang-riviä komentosarjan alkuun.

Jos et määritä shebang-riviä, komentosarja ajetaan käyttäen nykyistä komentotulkkia, jota käytetään execute-komennon käynnistämiseen.

Nyt kun tiedät, miten Bash-skriptejä luodaan, katsotaanpa, miten voit suorittaa niitä.

Bash-skriptien suorittaminen

Toteuttaaksesi Bash-skriptejä Linuxissa sinulla on periaatteessa kaksi vaihtoehtoa :

  • Määrittelemällä haluamasi komentotulkin ja skriptitiedoston;
  • Käyttämällä polkua skriptitiedostoon;

Komentotulkin määrittäminen

Ensimmäinen keino on melko yksinkertainen.

Toteuttaaksesi bash-skriptisi, määrittelet itse haluamasi tulkin.

$ bash <script>$ /bin/bash <script>

Käyttäen aiemmin käyttämäämme esimerkkiä, tämä antaisi seuraavan tulosteen.

Kuten huomaat, tämä menetelmä ei edes vaadi tiedoston suoritusoikeuksia execute, sinun täytyy vain pystyä käyttämään bash-selainta.

Kuten näet, kun olen kirjautuneena toisena käyttäjänä ilman execute-oikeuksia, pystyn silti suorittamaan tämän komentosarjan.

Tämä on tärkeä huomautus, koska saatat haluta tallentaa komentosarjatiedostojasi suojattuihin hakemistoihin (joihin vain sinä pääset käsiksi) estääksesi muita käyttäjiä suorittamasta tiedostoja.

Skriptin polun määrittäminen

Toinen tapa suorittaa bash-skriptejä on määrittää tiedoston polku.

Tämän menetelmän käyttäminen edellyttää, että tiedostolla on execute-oikeudet.

Käytä ensin komentoa ”chmod” asettaaksesi execute-oikeudet nykyiselle käyttäjälle.

$ chmod u+x <script>

Kuten näet, tiedoston väri on aivan erilainen : nykyinen päätelaitteesi korostaa suoritettavat tiedostot tietyillä väreillä, tässä tapauksessa vihreällä värillä.

Nyt kun komentosarjasi on suoritettavissa, voit suorittaa sen antamalla komentosarjan suhteellisen tai ehdottoman polun.

Käytettäessä tiedostoa nimeltä ”script.sh”, joka sijaitsee nykyisessä työhakemistossani, skripti voidaan suorittaa suorittamalla

$ ./script.sh

Jos olet toisessa hakemistossa, sinun on määritettävä skriptitiedoston absoluuttinen polku.

$ /home/user/script.sh

Kuten luultavasti olet jo tajunnut, tämä menetelmä ei ole kovin kätevä, jos joudut määrittelemään skriptin polun joka ikinen kerta.

Sinun onneksi on olemassa keino, jolla voit suorittaa skriptisi yksinkertaisesti kirjoittamalla tiedostonimen komentoriville.

Skriptin lisääminen PATH:iin

Päätettä ”.sh” ei tarvita, jotta skriptiä voidaan pitää skriptitiedostona.

Yksinkertaisuuden vuoksi nimeämme olemassa olevan ”script.sh”-tiedostoa muotoon ”script”.

Tiedostojen uudelleennimeämiseen Linuxissa käytetään yksinkertaisesti komentoa ”mv” ja määritetään lähde- ja kohdekohteet.

$ mv script.sh script

Entä jos haluaisit suorittaa skriptisi kirjoittamalla ”script”?

Sitä varten sinun on lisättävä skriptisi polku PATH-ympäristömuuttujaan.

Tulostaaksesi PATH-ympäristömuuttujasi senhetkisen arvon, käytä komentoa ”printenv” argumentin ”PATH” kanssa.

$ printenv PATH

Päivittääksesi PATH:n nykyisessä työympäristössäsi, muokkaa PATH-ympäristömuuttujaa seuraavalla syntaksilla.

$ export PATH="<path_to_script>:$PATH"

Nyt äsken määrittelemäsi ”script”-komento on suoraan käytettävissäsi ilman polkujen määrittelyä : voit käynnistää sen kuten minkä tahansa muun komennon.

Huomautus : jos haluat tehdä muutoksistasi pysyviä, noudata näitä ohjeita päivittääksesi PATH-muuttujan kunnolla.

Shellin sisäänrakennetut lisäosat selitettynä

Ennen kuin ilmoitat mitään muuttujia komentosarjakomentosarjassasi, sinun on tärkeää tietää komentosarjakomentosarjan sisäänrakennetuista lisäosista.

Kun työskentelet Bash-komentotulkilla, suoritat suurimman osan ajasta ”ohjelmia”.

Esimerkkejä ohjelmista ovat ”ls”, ”fdisk” tai ”mkdir”. Apua näihin komentoihin löydät käyttämällä komentoa ”man”, joka on lyhenne sanoista ”manual”.

Oletko kuitenkin koskaan yrittänyt lukea komennon ”source” dokumentaatiota?

Et pystyisi lukemaan dokumentaatiota käyttämällä komentoa ”man”, koska komento ”source” on komentotulkin sisäänrakennettu toiminto.

Komentotulkin sisäänrakennettuihin toimintoihin liittyvän dokumentaation lukeminen edellyttää komennon ”help” käyttöä.

$ help <command>

Luettelo komentotulkin sisäänrakennetuista komennoista on melko laaja, mutta tässä on kuvakaappaus jokaisesta bashin sisäänrakennetusta komennosta, jonka saatat löytää Ubuntu-järjestelmistä.

Bash-muuttujien käyttäminen

Nyt kun tiedät Bashin sisäänrakennetuista lisäosista, sinun on aika aloittaa omien Bash-skriptien kirjoittaminen.

Muistutuksena mainittakoon, että päätelaitteeseen kirjoittamiasi komentoja voidaan käyttää Bash-skriptissä aivan samalla tavalla.

Jos esimerkiksi haluat skriptin, joka yksinkertaisesti suorittaa komennon ”ls -l”, muokkaat vain skriptiäsi, lisäät siihen shebang-rivin ja komennon.

#!/bin/bash# This simple script executes the ls commandls -l

Nyt entäpä jos haluaisit Bash-muuttujia?

Bash-muuttujat ovat yksinkertaisia ohjelmamuuttujia, jotka voivat tallentaa monenlaisia erilaisia syötteitä.

Muuttujan ilmoittamiseksi Bash-muuttujaksi riittää, että määrittelet muuttujan nimen ja sen arvon yhtäsuuruusmerkillä erotettuna.

VAR=value

Voidaksesi käyttää Bash-muuttujasi sisältöä komentosuunnitelmassasi käytä komentokirjainta ”$” ja liitä siihen muuttujasi nimi.

echo $VAR

Vaikka voit käyttää tätä syntaksia saadaksesi muuttujan arvon, voit myös käyttää ”sulkujen” merkintätapaa.

echo ${VAR}

Tämän syntaksin avulla muuttujia voidaan yhdistää toisiinsa.

Jos sinulla on esimerkiksi kaksi Bash-muuttujaa nimeltä VAR1 ja VAR2, voit saada ne molemmat tulostettua käyttämällä seuraavaa syntaksia

echo "${VAR1}${VAR2}"

Komentojen suorittaminen skriptien sisällä

Voidaksesi suorittaa komentoja Bash-skriptien sisällä sinun on käytettävä komentojen korvaamista.

Komennon korvaaminen on tekniikka, jota käytetään Bash-kuorissa, jotta komennon tulos voidaan tallentaa muuttujaan.

Komennon korvaamiseen Bashissa käytetään dollarimerkkiä ja komento suljetaan sulkuihin.

VAR=$(command)

Voidaksesi esimerkiksi saada tulokseksi nykyisen hakemistosi tiedostojen lukumäärän kirjoittaisit

#!/bin/bashNUMBER=$(ls -l | wc -l)echo "${NUMBER} files in this directory!"

Kuten huomaat, komennon korvaaminen on melko kätevää, koska sen avulla voidaan suorittaa komentoja dynaamisesti komentosarjakomentosarjassa ja palauttaa arvo takaisin käyttäjälle.

Tulosten palauttamisesta loppukäyttäjälle puheen ollen, miten käsittelet skriptejä, jotka eivät pääty oikein?

Mitä jos komento komentosarjan sisällä ei suoritettu oikein?

Lopetustilojen ymmärtäminen

Kun suoritat komentosarjaa, vaikka et palauttaisikaan arvoa, komentosarja palauttaa aina niin sanotun poistumistilan.

Lopetustila Bash-skriptiohjelmassa ilmaisee, onnistuiko komentosarjan suoritus.

Jos tilakoodi on nolla, komentosarjasi suoritus onnistui. Jos arvo on kuitenkin jokin nollasta poikkeava arvo (esimerkiksi yksi, kaksi tai useampi), se osoittaa, että komentosarjan suoritus ei onnistunut.

Lopetustilan osoittamiseksi suorita mikä tahansa kelvollinen komento bash-selaimessa.

echo "This is a simple working command"

Käytä nyt tätä komentoa tarkastellaksesi viimeksi suoritetun komennon poistumistilaa.

echo ${?}

Kuten näet, tämän komennon tulosteena on ”0” eli viimeisimmän suorittamani komennon poistumistila.

Tätä syntaksia (”${?}”) voidaan käyttää skripteissä, jotta voidaan varmistaa, että komennot suoritetaan oikein.

Lopetustilaa voidaan käyttää skripteissä, jotta skripti voidaan lopettaa tietyllä tilakoodilla.

Jos esimerkiksi haluat poistua komentosarjasta virheilmoituksella, voit käyttää komentosarjassa seuraavaa komentoa.

exit 1

Vaikka voit käyttää poistumiskoodia ”nolla” määrittääksesi, että komentosarja suoritettiin onnistuneesti.

exit 0

Varmistaaksesi, oliko tilakoodi oikea, tarvitset perusehdollisia lausekkeita, kuten IF-lauseketta.

Ehtojen muokkaaminen Bashissa

Joskus bash-skriptien suorittamisessa ei ole kyse vain siitä, että useat komennot ovat vierekkäin : halutaan myös ehdollisia toimia.

Jossain tapauksissa voi olla kätevää, että ehdolla tarkistetaan, onko nykyinen käyttäjä pääkäyttäjä (tai vain tietty käyttäjä järjestelmässäsi).

Yksi yksinkertaiseksi tavaksi asettaa ehtoja Bashissa on if-lausekkeen käyttö.

”If” on komentotulkin sisäänrakennettu lauseke, minkä seurauksena ohjekirja on saatavilla komennon ”help” kautta

$ help if

Huoltosivulla kuvataan if-komennon syntaksia puolipisteiden avulla, mutta me käytämme tätä syntaksia (joka on ekvivalenttinen)

if ]then <commands>else <command>fi

Harjoitustapaus : sen tarkistaminen, onko käyttäjä pääkäyttäjä

Näyttääksemme, mihin if-käskyä voidaan käyttää, kirjoitamme yksinkertaisen skriptin, jolla tarkistetaan, onko käyttäjä pääkäyttäjä vai ei.

Muistutuksena mainittakoon, että root-käyttäjän UID on aina asetettu nollaan missä tahansa Unix-järjestelmässä.

Tämän tiedon tietäen tarkistamme, onko UID asetettu nollaan, jos näin on, suoritamme loput skriptistä, muussa tapauksessa poistumme skriptistä.

Kuten muissa opetusohjelmissa (käyttäjähallinnasta) on selitetty, voit saada nykyisen käyttäjätunnuksen käyttämällä komentoa ”id”.

$ id -u1000

Käytämme tätä komentoa tarkistaaksemme, onko skriptiä suorittava käyttäjä root vai ei.

Luo uusi skripti ja lisää siihen shebang-rivi.

#!/bin/bash

Heti sen alapuolelle lisätään komento ”id” ja tallennetaan tulos muuttujaan nimeltä ”USERID” käyttämällä komennon korvaamista.

USERID=$(id -u)

Nyt kun ”USERID” sisältää nykyisen käyttäjätunnuksen, käytä IF-lausetta tarkistaaksesi, onko käyttäjätunnus nolla vai ei.

Jos näin on, kirjoita yksinkertainen informatiivinen viesti, jos ei, poistu skriptistä exit-statuksella 1.

if ]then echo "This is root"else exit 1fi

Jos nyt suoritat skriptin nykyisenä käyttäjänäsi, skripti yksinkertaisesti poistuu poistumistilalla yksi.

Yritä nyt suorittaa komentosarja pääkäyttäjänä (komennolla sudo)

Kuten huomaat, informaatioviestisi tuli näkyviin ja komentosarja poistui virhekoodilla nolla.

Yhteenveto

Tässä opetusohjelmassa opit Bash-ohjelmointikielestä ja siitä, miten sitä voidaan käyttää Bash-skriptien luomiseen järjestelmässäsi.

Oppasit myös poistumistilanteista ja ehdollisista lausekkeista, jotka ovat avainasemassa, jotta skripteihisi voidaan asettaa mukautettu logiikka.

Nyt kun sinulla on enemmän tietoa Bashista, sinun kannattaa aloittaa kirjoittamalla omia skriptejä tarpeitasi varten : voit aloittaa esimerkiksi arkistojen varmuuskopiointitiedostojen luomista käsittelevästä opetusohjelmasta.

Jos olet kiinnostunut Linux-järjestelmänhallinnasta, meillä on sille omistettu kokonainen osio verkkosivuillamme, joten käy tutustumassa siihen!

Vastaa

Sähköpostiosoitettasi ei julkaista.