Hieman linkkejä: http://cs.stadia.fi/~kuivanen/linux/kom.php, lyhyt ohje komentoriviohjelmointiin.



Samankaltaiset tiedostot
Komentotulkki (SHELL) C- "perhe" - csh, alkup. C shell. Komentokieli. kieltä. - tcsh - edellisen laajennettu versio

Kieliteknologian ATK-ympäristö Viides luento

Kieliteknologian ATK-ympäristö Viides luento

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 3. Timo Savola. 7. huhtikuuta 2006

Luento 2. Timo Savola. 31. maaliskuuta 2006

Luento 4. Timo Savola. 21. huhtikuuta 2006

Unix-perusteet. Unix/Linux-käyttöjärjestelmä ja sen ominaisuudet

Kieliteknologian ATK-ympäristö Kuudes luento

Unix-perusteet. Tiedosto-oikeudet

Unix-kurssi, harjoitustehtävät

Korpusten käsittely clt131, P Luento 5

Sisällys. Johdatus Linuxiin/Unixiin: Osa 4. Arkistointi ja pakkaus. Hakemistojen ja tiedostojen arkistointi ja pakkaus.

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Unix-kurssi, harjoitustehtävät

PHP tehtävä 3 Atte Pekarinen TIKT13A

Julkaiseminen verkossa

4. Lausekielinen ohjelmointi 4.1

linux linux: käyttäjän oikeudet + lisää ja - poistaa oikeuksia

Ohjelmoinnin perusteet Y Python

VERKKOSOVELLUSTEN OHJELMOINTI, JOHDATUS PHP:HEN

Komentotulkki. Kysymyksiä

linux linux: käyttäjän oikeudet + lisää ja - poistaa oikeuksia

[Jnix näyttökoe. o ei ole sallittua käyttää mitään verkkolevyjakoa tai mitään siihen rinnastettavaa järjestelmdä.

Johdatus Ohjelmointiin

Metropolia Ammattikorkeakoulu

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Ctl160 Tekstikorpusten tietojenkäsittely Kolmas luento,

Harjoitustyö: virtuaalikone

2 Konekieli, aliohjelmat, keskeytykset

Korpusten käsittely clt131, P Luento 4

Java-kielen perusteet

Kieliteknologian ATK-ympäristö Toinen luento

CLT131: Tekstityökalut 2012, kymmenes luento

LINUX-HARJOITUS, MYSQL

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

ASCII-taidetta. Intro: Python

5. HelloWorld-ohjelma 5.1

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Kieliteknologian ATK-ympäristö Neljäs luento

Asialista. CLT131: Tekstityökalut 2012, kymmenes luento. 2. frekvenssien muunnos todennäköisyyksiksi. 1. taulukkohaut

Makrojen mystinen maailma lyhyt oppimäärä

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Python-ohjelmointi Harjoitus 2

Ctl160 Tekstikorpusten tietojenkäsittely Kolmas luento

Käytin tehtävän tekemiseen Xubuntu käyttöjärjestelmää aikaisemmin tekemältäni LiveUSB-tikulta.

Hakemistojen sisällöt säilötään linkitetyille listalle.

Unix. Markus Norrena

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

SCI- A0000: Tutustuminen Linuxiin, syksy 2015

Ohjelmoinnin perusteet Y Python

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Ohjelmoinnin perusteet Y Python

Ctl160 Tekstikorpusten tietojenkäsittely p.1/28

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Sekalaisia selvennyksiä

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Ohjelmoinnin perusteet Y Python

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Zeon PDF Driver Trial

Ohjelmoinnin peruskurssi Y1

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

3.1 Mitä tarkoittaan heredoc? Milloin sitä kannattaa käyttää? Kirjoita esimerkki sen käyttämisestä.

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

Ctl160 Tekstikorpusten tietojenkäsittely p.1/15

4. Lausekielinen ohjelmointi 4.1

Sormet skripteihin. 1 Mistä tässä harjoitteessa on kyse

TIETOKONEEN ÄÄRELLÄ. Kansalaisopistot kotouttamisen tukena hanke/opetushallitus Kuopion kansalaisopisto

Terminaali-ohjelman käyttö - 1

Ohjelmoinnin perusteet Y Python

IT K 1 45 K ä yt t öj ä rj estelmät

Linux - käyttöoikeudet

Entiteetit erotetaan muusta tekstistä & ja puolipiste. esim. copyright-merkki näkyy sivulla

DIGITAALISEN TARINAN TUOTTAMINEN MICROSOFT PHOTO STORY 3- OHJELMAN AVULLA VAIHEINEEN

Ohjelmoinnin perusteet Y Python

Julkaiseminen verkossa, esitysgrafiikkaa (laitteistosta, tietotekniikka ja tulevaisuus) H9T1: Tiedostojen vienti internetiin

Ohjelmoinnin perusteet Y Python

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ohjelmoinnin peruskurssi Y1

SELVITYSRAPORTTI LABRA-VERKON MYSQL:n JA PHP:n KÄYTTÖÖNOTOSTA. Jarkko Kähkönen

Ohjelmoinnin perusteet, syksy 2006

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Alkuun HTML5 peliohjelmoinnissa

zotero

Komentorivin perusteet

Muuttujan sisällön näet kirjoittamalla sen nimen ilman puolipistettä

Tässä dokumentissa on ensimmäisten harjoitusten malliratkaisut MATLABskripteinä. Voit kokeilla itse niiden ajamista ja toimintaa MATLABissa.

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tehtävä: FIL Tiedostopolut

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Lisätehtävät. Frantic 2015 sivu 1

Transkriptio:

Linux-harjoitus 9 Linuxin mukana tulevat komentotulkit (mm. bash, tcsh, ksh, jne ) sisältävät ohjelmointikielen, joka on varsin tehokas ja ilmaisuvoimainen. Tähän yhdistettynä unix-maailmasta tutut tehokkaat apuohjelmat, voi sanoa, ettei Linuxissa jonkun pienen ohjelmointiongelman ratkaisemiseen tarvita mitään muuta ulkoista ohjelmointikieltä. Hieman linkkejä: http://cs.stadia.fi/~kuivanen/linux/kom.php, lyhyt ohje komentoriviohjelmointiin. http://ameba.lpt.fi/~kettueer/unix-perusteet/komentotiedostot.html, toinen ohje komentoriviohjelmointiin (Eero Kettunen). http://www.ling.helsinki.fi/~mlounela/unixk/sisalto.html, Hieman yleisluontoisempi ohje, sivuaa myös komentoriviohjelmointia. http://koti.welho.com/jkajaste/bash.html, Jaakko Kajasteen laajempi opas komentoriviohjelmointiin. Lisää löytää vaikkapa antamalla Googlelle hakusanoiksi esim. shell ohjelmointi. Ohjelmien suoritus unix-pohjaisissa käyttöympäristöissä Unix poikkeaa tässä Windows-maailmasta ratkaisevasti. Kun Windowsmaailmassa etsitään suoritettavaa ohjelmaa ensiksi työhakemistosta ja mennään vasta sitten hakemaan ns. hakemistopolusta (PATH), unix-pohjaisissa käyttöjärjestelmissä mennään suoraan hakemaan ohjelmaa hakemistopolusta. Tällä estetään ns. ohjelman kaappaukset. Myöskään tiedoston nimen pääte ei määrää sitä, minkä tyyppinen ohjelma on kyseessä. Jos unixissa laittaa ohjelman (skriptin) nimeksi ohjelma.sh, on kirjoitettava näkyviin koko ohjelman nimi, viimeistä kirjainta myöten. Skriptille tulee aina ennen suoritusta antaa suoritusoikeudet. Suoritusoikeus annetaan seuraavalla komennolla: $ chmod u+x ohjelma.sh Esimerkki antaa omistajalle (u user) lisää (+) suoritusoikeuden (execute) Miten skripti käynnistetään unixissa? Jos työhakemisto on polussa, voi skriptin käynnistää aivan samoin kuin Windowsin komentoriviltä, eli näin: $ ohjelma.sh Jos työhakemisto ei ole polussa, pitää ohjelman sijainti kertoa. Yksinkertaisimmillaan se voidaan sitoa työhakemistoon näin: $./ohjelma.sh Piste viittaa aina työhakemistoon. Näin ollen yllä olevassa esimerkissä kerrotaan, että suorita työhakemistossa oleva ohjelma.sh-tiedosto 1(5)

Muitakin tapoja suorittaa skripti on, esimerkiksi antamalla se parametrinä komentotulkille. Mitkä hakemistot ovat polussa (PATH)? Ensimmäinen skripti Perinteisesti bin-nimiset hakemistot ovat tarkoitettu ohjelmille (/bin, /usr/bin, /usr/local/bin, jne). Myös käyttäjän kotihakemiston alle tehty bin-hakemisto on olemassa valmiina polussa, vaikkei itse hakemistoa vielä olekaan. Näin ollen jos haluat tehdä sellaiseen paikkaan skriptisi, josta voit suorittaa ne missä vain, tee kotihakemistoosi hakemisto bin, jonne talletat kaikki skriptisi. Seuraavat tehtävätkin voit toteuttaa siellä. Kaikki itseään kunnioittavat ohjelmointioppaat aloittavat seuraavalla esimerkillä. Kirjoita se haluamallasi editorilla ja anna sille nimeksi vaikkapa hello: Tehtäviä echo Hello world Anna suoritusoikeudet sille ja testaa se. Ensimmäinen rivi määrittää käytettävän komentotulkin. Sh on Unixien peruskomentotulkki, Bourne Shell. Sitä käytetään yleisimmin, koska se on mukana kaikissa unixeissa. Perus-linux-komentotulkit, kuten bash ja zsh, perustuvat tähän komentotulkkiin ja niiden komentokieli on jokseenkin samanlainen. C- komentotulkkihaaran kieli on taas näistä poikkeavaa. Tähän haaraan ei tällä kertaa puututa. Yleensäkin suurin osa komentoriviohjelmointioppaista keskittyy ns. Bourne-haaran kieliin. 1. Lisää aiemmin esillä olleeseen hello-skriptiin kahden rivin väliin rivi, jolle kirjoitat komennon clear. Testaa skriptiä ja katso, miten tulos muuttui. 2. Kirjoita seuraava skripti ja mieti, mitä se tekee echo Moi, mikä sinun nimesi on? read nimi echo Hei, minusta $nimi on kaunis nimi. 3. Vaihda jälkimmäiseen echo-lauseeseen kaksinkertaisten lainausmerkkien tilalle yksinkertaiset (heittomerkki ). Kokeile nyt samaa skriptiä. Mitä havaitsit? 4. Lisää samaan skriptiin seuraava rivi loppuun: echo Tiesitkö, että tänään on vuoden `date +%j`.s päivä? Tuo hipsu -merkki löytyy näppäimistöltä kysymysmerkin vierestä. Saatat tarvita välilyöntinäppäimen painallusta merkin jälkeen. Mitä tulostui? 2(5)

5. Seuraava skripti kertoo nimensä sekä parametrinsä: echo Tämän skriptin nimi on $0 echo Ensimmäinen parametri on $1 ja toinen $2 echo Annoit yhteensä $# parametriä, jotka olivat: $* Kokeile skriptiä antamalla komennon perään muutama parametri, vaikkapa näin: $ param.sh eka toka kolmas neljas Numerot 0 9 ovat siis varattu komentorivin parametreille. Normaalisti tieto välitetäänkin skripteille komentorivin parametreillä eikä millään read-lauseella. 6. Mitä seuraava tekee: if [ $1 gt 10 ] then echo parametri oli suurempi kuin 10 else echo parametri oli 10 tai pienempi fi 7. Entä seuraava: summa=0 for luku in 1 2 3 4 5 6 do summa=`expr $summa + $luku` done echo "Lukujen 1-6 summa on $summa." 8. Miten saisit yo. skriptin lukemaan luvut parametreinä? 9. Tee skripti, joka ilmoittaa sille parametrinä annettujen kahden luvun tulon. 10.Kuinka saat edellisen skriptin tarkistamaan, annettiinko sille jokin muu määrä kuin kaksi parametriä? Awk Awk on eräs Unix-maailman skriptikielistä. Sen nimi tulee todellisuudessa kolmesta nimestä: Aho, Weinberger, Kerningnhan. Se on ns. normaaleihin ohjelmointikieliin tottuneelle varsin erilainen kieli, mutta se on erittäin vahva työkalu sarakemuotoisen datan käsittelyyn. Siksi sillä on varsin paljon käyttötarkoituksia Unix/Linux-ympäristöissä. Gnu-versioon awk:sta löytää parhaan manuaalin osoitteesta http://www.gnu.org/software/gawk/manual/html_node/index.html. Toinen vastaava on http://www.cs.uu.nl/docs/vakken/st/nawk/nawk_toc.html. Suomeksi awk:sta kirjoittaa lyhyesti Jukka Korpela osoitteessa http://www.cs.tut.fi/~jkorpela/unix/5.11.html. Awk on varsin monipuolinen työkalu. Tässä dokumentissa esitellään muutama sen ominaisuuksista. Ominaisuudet käydään läpi esimerkkien avulla. 3(5)

Awk-esimerkkejä Awk on sarakeorientoituneen datan käsittelyyn tarkoitettu työkalu. Esimerkiksi ls -l awk '{print $9" "$5}' tulostaa tiedostolistauksesta tiedoston koon sekä tiedoston nimen. $-merkillä ja luvulla siis viitataan sarakkeeseen. Sarakelaskuri alkaa edellisen perusteella 1:stä. Jos kenttäerotin on jotain muuta kuin välilyönti taikka tabulaattori, sen voi kertoa -F-optiolla, esim. näin: awk -F: '{print $1}' /etc/passwd Tämä tulostaa ensimmäisen kentän /etc/passwd -tiedostosta. Olkoon tekstitiedosto, jossa on talletettuna seuraavat tiedot: Kalle 100 Elmeri 250 Kalle 90 Juuso 120 Uuno 90 Juuso 250 Kirjoitetaan seuraavat asiat tiedostoon nimeltään laske: BEGIN END { print Frekvenssit: } { sum[$1] += $2 } { for (name in sum) print name, sum[name] } Sen jälkeen kokeillaan komennolla awk -f laske nimet mitä tapahtuu. Huomaa optio -f ja mitkä parametrien roolit ovat. Mitä komennon suoritus tekee? Seuraava awk-esimerkki etsii pisimmän rivin pituuden tiedostosta data: awk '{ if (length($0) > max) max = length($0) } END { print max }' data Olkoon seuraavanlainen tiedosto: Uuno 100 97 58 Lissu 84 72 93 Ulla 72 92 89 Elmeri 99 34 44 Seuraava operaatio laskee kunkin henkilön kohdalla olevien lukujen keskiarvon: awk '{ sum = $2 + $3 + $4 ; avg = sum / 3 print $1, avg }' grades kun tiedoston nimi on grades. 4(5)

Awk-tehtäviä 1. Toteuta edellisessä kappaleessa esitetyt esimerkit. 2. Toteuta nimi-esimerkin koodi siten, että yhteissummien sijasta lasketaan nimien esiintymismäärät taulukossa. 3. Tulosta /etc/passwd-tiedoston user-id-numerot ja tulosta ne numerojärjestyksessä. 4. Mitä seuraava awk-ohjelma tekee? { for (i = 1; i <= NF; i++) freq[$i]++ } END { for (word in freq) printf "%s\t%d\n", word, freq[word] } 5. Laske vastaavalla operaatiolla tiedoston rivien lukumäärä.seuraava awkoperaatio laskee, montako marraskuussa modifioitua tiedostoa on tiedostolistauksessa: ls -l awk '$5 == "Nov" { sum++ } END { print sum }' Toteuta nyt edellisen perusteella awk-ohjelma, joka laskee marraskuussa (taikka jossain muussa kokeilun kannalta sopivassa kuussa) muokattujen tiedostojen koot yhteen. 6. Kuinka lasket awk:n avulla tiedostojen koot yhteen? 7. Haluat tietää, montako yli 10 000 tavun tiedostoa hakemitossasi on. Laadi awkohjelma, jolla lasket niiden kokonaistavumäärän ja lukumäärän. 8. Luo jokin pieni tekstitiedosto. Tee sen jälkeen awk-ohjelma, joka laskee kaikkien yli 50-merkkisten rivien lukumäärän tiedostosta. 9. Tutustu awk:n valmiiksimääriteltyihin muuttujiin. Mikä muuttuja kertoo tiedoston rivien lukumäärän? 5(5)