Käsurida 202 (2. praktikum)
<- eelmine peatükk järgmine peatükk ->
4. Käsurida aitab teha oma skripte, mis teevad elu palju lihtsamaks
Skriptimine
Kujuta ette mõne etenduse, filmi või telesarja skripti. Skript ütleb näitlejatele täpselt, mida ja kuidas teha, millal öelda põhjapanevaid lauseid, millal nutta ja millal naerda. Arvutile mõeldud skript ütleb arvutile samamoodi ette, mida ja kuidas teha ja kuidas käituda. Praeguses kontekstis keskendume me Bash skriptidele ja vaatame, mis on nende eelised ja kuidas skriptimisega algust teha.
Bash skript on tavaline tekstifail, mis koosneb erinevatest käskudest. Need käsud on samasugused nagu me oleme harjunud käsureale sisestama (nagu näiteks cp ja ls). Tuleb tähele panna, et kõike, mida me saame käivitada käsureal, saame me jooksutada skriptina ja tulemus on täpselt sama.
Skriptide eeliseks on kiirus ja lihtsus - nendega on võimalik automatiseerida väga mitmeid erinevaid tegevusi ning teha oma elu kordades kergemaks. Allpool vaatame näiteid, kuidas inimesed on teinud lühikesi skripte, et oma aega optimiseerida ja enda elu lihtsamaks teha.
Alustame ise oma esimese skripti loomise ja käivitamisega
Bash skripti päiseks ehk esimeseks reaks on alati #!/bin/bash
Sellega määratakse skripti interpretaatoriks standardne POSIX-ühilduv käsuintepretaator (Bourne Shell).
Käsureaskriptide kokkuleppeline failide laiend on .sh, aga palju kasutatakse ka lihtsalt ilma laiendita failinimesid - oluline on, et fail oleks käivitatav (executable).
Võtame läbitegemiseks ette ühe lühikese skripti
1. Loome uue kausta nimega "skriptid" oma kodukausta
2. Liigume sellesse kausta ning loome uue faili kursus.sh kasutades nano tekstiredaktorit
Sisuks lisa bash skripti päis ning echo rida
#!/bin/bash echo “Tere, “$USER
echo on käsuinterpretaatori käsk, mis väljastab ekraanile (standardväljundisse) oma argumendid.
3.Nüüd käivitame selle käsuga sh kursus.sh.
Kui käivitamisel näeme, et meil ei ole piisavalt õigusi, siis peame andma endale õigused seda skripti käivitada. Selle teema juurde tuleme tagasi järgmises praktikumis, aga seni piirdume vaid sellega, et peame käsureale sisestama järgmise käsu.
sudo chmod +x skripti_nimi.sh
4. Olemegi valmis! Nüüd saame käivitada oma tehtud skripti!
Käivita skripte igalt poolt
Kui aga soovime, et meie loodud skripte saaks käivitada igal pool, mitte vaid ~/skriptid kaustas, siis tuleb anda süsteemile ette tee, kust ta skripte otsib.
Esmalt peame andma soovitavatele skriptidele kõrgemad käivitamise õigused:
sudo chmod +x skripti_nimi.sh
NB! Soovitame selle Sul kindlasti läbi teha, kuna hiljem ei pea mõtlema, kuhu üks või teine skript salvestatud oli.
1. Liigu kodukausta ning ava fail .bashrc
nano .bashrc
2. Kirjuta uuele reale
export PATH=~/skriptid:$PATH
Ning salvesta see fail
Terminali uuesti avades viiakse sisse muudatused ning nüüd saame ~/skriptid kaustas olevaid skripte käivitada igalt poolt.
Skripti käivitamiseks pole enam tarvis käsklust sh, vaid piisab lihtalt skripti failinime kirjutamisest. Näiteks eelloodud skripti saame käivitada suvalisest kaustast käsuga kursus.sh.
Muutujad ja käsurea parameetrid
Skriptides on võimalik kasutada mitut erinevat tüüpi muutujaid:
1. Protsessilt protsessile päranduvad keskkonnamuutujad $PATH - kust otsida käivitatavaid programme, kui nende asukoht pole täisteega määratud
$USER - kasutajanimi
$PWD - protsessi hetkel aktiivne töökataloog
2. Skripti sisendi muutujad, mille kaudu saab ligi skripti argumentidele ja muule skriptiga seotud informatsioonile $0 - skripti nimi
$1 $2 .. $9 - skripti käsurea argumendid
3. Skripti sisesed lokaalsed skripti looja poolt määratud muutujad nimi="Juku" - Muutuja väärtustamisel piisab vaid nime määramisest (NB! Võrdusmärgi ees ja järel ei tohi olla tühikuid!)
echo $nimi Muutuja väärtuse kasutamisel tuleb nime ette panna $ märk:
Kasutades ülakomasid (') teksti ümber, ei asendata seal sees muutujate väärtusi (ehk märgil $ ei ole mõju, kui see on ülakomade vahel) echo 'Ei asenda muutujat $1 tema väärtusega'
Kui aga kasutada juttumärke ("), toimub asendus ilusti. echo "Asendatakse muutuja $1 tema väärtusega"
Interaktiivne sisend
Selleks, et küsida kasutaja käest täiendavat informatsiooni (näiteks failinime), saab kasutada
Read käsku nii: echo "Sisesta väärtus:" read sisse echo "Sisestati: $sisse"
Ülesanne
Muuda oma kursus.sh skripti nii, et küsitakse kasutaja käest ükshaaval tema vanus, elukoht ning lemmikfilm. Sisestatud vastused tuleb väljastada ekraanile.
Tingimuslaused ja tsüklid
Sarnaselt muudele programmeerimiskeeltele on võimalik skriptides kasutada erinevaid tingimusi ja tsükleid.
If ja else
Teistest programmeerimiskeeltest juba hästi tuntud IF-ELSE konstruktsioon:
NB! Pöörake tähelepanu [ ] sulgude juures enne ja pärast tühikute kasutamisele!
#!/bin/bash a=$1 if [ $a -lt 1000 ] then echo "Sisestatud arv on vaiksem kui 1000" elif [ $a -ge 1000 -a $a -le 5000 ] then echo "Sisestatud arv on vahemikus 1000 kuni 5000" else echo "Sisestatud arv on suurem kui 5000" fi
Operaatorid teksti (stringide - kõik muutujad on siin stringitüüpi) võrdlemisel:
= - võrdne
!= - mittevõrdne
-z - On tühi
-n - Ei ole tühi
Operaatorid arvude võrdlemisel (stringide intepreteerimine tekstina esitatud arvudena):
-eq - võrdne (ingl. k. equal)
-ne - mittevõrdne (ingl. k. not equal)
-lt - väiksem (ingl. k. less than)
-le - väiksem või võrdne (ingl. k. less or equal)
-gt - suurem (ingl. k. greater than)
-ge - suurem või võrdne (ingl. k. greater or equal)
Ning loogikaavaldised:
-a (AND) nõuab mõlema tingimuse samaaegset täidetust
-o (OR) väljendab, et täidetud võib olla üks või teine või mõlemad.
! (NOT) alustades tingimust hüüumärgiga, märgitakse eitust
While
While tsükli sisu korratakse seni, kuni tingimus on tõene. Näites sooritatakse järgnev sisu, kuni muutuja $a on väiksem kümnest:
#!/bin/bash a=0 while [ $a -lt 10 ] do echo $a a=$(($a+1)) done
For tsükkel
For kordus on kasulik mingi nimekirja või listi läbi vaatamiseks:
#!/bin/bash a="Martin Janar Tiit Juku" for i in $a do echo "$i" done
NB! Kui tegemist on teksti sisaldavate muutujatega, siis on soovitav muutuja kasutamisel ümbritseda see jutumärkidega nii: echo "$i", sest siis võib kindel olla, et bash ei tõlgenda sõnet kui mõnda käsku.
Kui eelmises nimekirjas oleks Janari asemel echo, siis saaks bash aru, et soovitakse käivitada echo käsku.
Kommentaarid lisavad skriptile/koodile arusaadavust ning on hea tava kommenteerida oma skripte, et kood oleks teiste jaoks loetav ning mõistev.
Kommentaare tähistatakse trellide #
YouTube terminalis
Kasutame järgmist skripti, mis laseb meil otse terminalist käivitada YouTube’i videosid.
Link repositooriumile on siin.
Skripti saad kopeerida järgnevalt lehelt: Skript
Järgi samu samme, mis eelneva kursus.sh skripti puhul ning salvesta see nimega ytview.sh
Kui õigused on antud, siis saame käsurealt otsida ja vaadata oma lemmikvideosid!
Video otsimiseks sisesta skripti nimi (nagu senini seda teinud oleme), seejärel tühikuga eraldatult märksonad, mis videosid otsida tahad. Näiteks käskluse ytview.sh funny dogs käivitamisel kuvatakse valikut lõbusate koerte videodest.
__________________________________________________________________________________________________________
NB! Kui Sul on arvutis VLC videomängija ning skriptis video valimise järel avanes küll VLC, kuid video esitamist ei toimunud, siis toimi järgnevalt:
1. Lae alla mpv videomängija järgmiste käskudega: sudo add-apt-repository ppa:mc3man/mpv-tests
sudo apt update
sudo apt install mpv
2. Veendu, et mpv videomängija on sinu arvutis olemas.
3. Lae alla ning käivita modifitseeritud ytview.
Miks VLC ei töötanud?
Teatud VLC versioonides ei toimi Youtube'i videode mängimine. Selle mure lahendamiseks pakuvad internetifoorumid paari erinevat lahendust. Kuna pole kindlalt toimivat lahendust, mis laseks VLC kaudu Youtube'i videosi esitada, ei hakka meie neid kasutama.
mpv on videomängija, mille kaudu saab selle skripti abil samuti videosid vaadata. Kolmandas punktis toodud modifitseeritud skripti on muudetud nii, et skript ei otsiks arvutist VLC videomängijat, vaid kasutaks mpv videomängijat, kui see on arvutis olemas. Uuri ning võrdle esialgset ja modifitseeritud skripti või proovi ise esialgsest skriptist VLC videomängija valimine eemaldada. __________________________________________________________________________________________________________
Meme generator
Selle skriptiga saame koostada meeme käsurealt.
Link repositooriumile on siin.
Skripti saad kopeerida järgnevalt lehelt: Skript
Salvesta see nimega meme.sh, anna õigused ning hakka koostama naljakaid meeme!
Meemide tegemiseks käivita terminalis meme.sh ning jälgi juhiseid
Terminalis saab pilte vaadata käsuga eog meme.png
Kui soovid pildi salvestada kindla nimega, siis kasuta skripti koos lisaparameetriga -f, mis laseb failile oma nime panna
meme.sh -f omanimi
Teisi parameetreid näeb käsuga meme.sh -help
Meemide malle ehk template’e näeb sellel lehel, kus kaustade nimed tähistavad erinevaid malle.
Lisahuvi korral saab skriptide kohta lugeda ning erinevaid põnevaid koodijuppe läbi teha siin
Harjutused:
1. Ava uus tekstidokument nimega vastused_käsurida202_OMANIMI.txt, kus OMANIMI asemel lisad oma nime.
2. Loo kaks otseteed, millega muuta oma elu kergemaks ning lisa need tekstidokumenti. Abi leiad Internetist.
3. Kirjelda oma sõnadega, mis on upgrade ja update käsu vahe.
4. Otsi Internetist üks huvitav ning kasulik skript. Lisa see enda süsteemi ning kirjelda, mis see teeb.
5. Saada tekstifail juhendajale või näita seda talle.
Kokkuvõte peamistest käskudest
$ pwd - näita, kus kohas ma asun (print working directory)
$ cd - vaheta asukohta (change directory)
$ ls - näita kausta sisu (list)
$ touch - loob uue faili
$ file - näitab, mis failiga on tegu
$ cat - loe (mitme) faili sisu (concatenate)
$ less - loe mugavalt suurema faili sisu
$ history - näitab sisestatud käskude ajalugu
$ cp kopeerib faili etteantud teele
$ mv - saame faile kas lõigata või ühest kohast teise tõsta
$ mkdir kaustanimi - loo uus kaust
$ rm - kustuta faile ja kaustu
$ help - näitab käsu infot
$ man - näitab käsu juhendit
$ whatis - näitab, mida käsk teeb