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

Samankaltaiset tiedostot
Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 4. Timo Savola. 21. huhtikuuta 2006

Kieliteknologian ATK-ympäristö Kuudes luento

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

Hieman linkkejä: lyhyt ohje komentoriviohjelmointiin.

Kieliteknologian ATK-ympäristö Viides luento

Kieliteknologian ATK-ympäristö Viides luento

Ohjelmointi 1 / syksy /20: IDE

Luento 3. Timo Savola. 7. huhtikuuta 2006

Metropolia Ammattikorkeakoulu

2 Konekieli, aliohjelmat, keskeytykset

Kieliteknologian ATK-ympäristö Toinen luento

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

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Kieliteknologian ATK-ympäristö Neljäs luento

Sekalaisia selvennyksiä

ITKP102 Ohjelmointi 1 (6 op)

Ctl160 Tekstikorpusten tietojenkäsittely Kolmas luento

Ohjelmoinnin perusteet Y Python

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

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

Zeon PDF Driver Trial

ITKP102 Ohjelmointi 1 (6 op)

T harjoitustehtävät, syksy 2011

8/20: Luokat, oliot ja APIt

Korpusten käsittely clt131, P Luento 4

Toinen harjoitustyö. ASCII-grafiikkaa

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

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

ITKP102 Ohjelmointi 1 (6 op)

5. HelloWorld-ohjelma 5.1

Ohjelmoinnin perusteet Y Python

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

Sisällys. Johdatus Linux/Unixiin: Osa 2. Prosessin tilat. Prosessien hallinta. Prosessien monitorointi

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

Ohjelmoinnin perusteet Y Python

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Subversion-ohje. Linux Traffic Control-käyttöliittymä Ryhmä paketti2

11. Javan toistorakenteet 11.1

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

7/20: Paketti kasassa ensimmäistä kertaa

Unix-perusteet. Tiedosto-oikeudet

Ohjelmoinnin perusteet, syksy 2006

CVS. Kätevä väline usein päivitettävien tiedostojen, kuten lähdekoodin, hallitsemiseen

17/20: Keittokirja IV

5/20: Algoritmirakenteita III

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Korpusten käsittely clt131, P Luento 5

Unix-kurssi, harjoitustehtävät

Harjoitus 5 (viikko 41)

YH1b: Office365 II, verkko-opiskelu

GIS-automatisointi ja ohjelmointi/skriptaus. Harri Antikainen

linux: Ympäristömuuttujat

Harjoitus 4 (viikko 47)

Harjoitus 2 (viikko 45)

Ohjelmointi 1 C#, kevät 2014, 2. uusintatentti NIMI:

Python-ohjelmointi Harjoitus 2

Luento 2. Timo Savola. 31. maaliskuuta 2006

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Harjoitus 3 -- Ratkaisut

Komentotulkki. Kysymyksiä

ITKA203 Käyttöjärjestelmät -- tenttitärpit -- kevät 2014

Unix-kurssi, harjoitustehtävät

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

4. Lausekielinen ohjelmointi 4.1

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

UCOT-Sovellusprojekti. Asennusohje

Harjoitus 5 (viikko 48)

Johdatus ohjelmointiin

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

12. Näppäimistöltä lukeminen 12.1

CLT131: Tekstityökalut 2011, viides luento

Osa 7: Hahmojen ohjelmointi ja hienosäätö

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

12. Javan toistorakenteet 12.1

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

CLT131: Tekstityökalut 2012, kymmenes luento

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

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

Tietokoneverkot. T Tietokoneverkot (4 op) viimeistä kertaa CSE-C2400 Tietokoneverkot (5 op) ensimmäistä kertaa

Asialista. hippu ja.bashrc. Asialista. Tutkimusongelma: tekstin morfologisen jäsennyksen selvittely

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

SCI- A0000: Tutustuminen Linuxiin, syksy 2015

Ohjelmoinnin perusteet Y Python

19/20: Ikkuna olio-ohjelmoinnin maailmaan

13. Hyvä ohjelmointitapa (osa 1) 13.1

Java kahdessa tunnissa. Jyry Suvilehto

Ctl160 Tekstikorpusten tietojenkäsittely Kolmas luento,

4. Lausekielinen ohjelmointi 4.1

Harjoitus 5 (viikko 41)

TAMPEREEN TEKNILLINEN YLIOPISTO

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

VERKKOSOVELLUSTEN OHJELMOINTI, JOHDATUS PHP:HEN

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Transkriptio:

Sormet skripteihin ITKA203 Käyttöjärjestelmät -kurssin Demo 4 kesällä 2007. Paavo Nieminen / Jyväskylän yliopiston Tietotekniikan laitos. 1 Mistä tässä harjoitteessa on kyse Tässä julkaistaan Bourne Shellin pikaohje, joka tulee tentissä liitteeksi (mukaelleen aiempien tenttien C-shell -vastaavaa). Skripteistä on vapaaehtoinen yhden pisteen arvoinen palautustehtävä. Tavoitteet: demossa 1 nähty interaktiivisen shellin käyttö laajennetaan skriptien tekemiseen näet ja jopa jonkin verran teet skriptiohjelmointia, mikä toivottavasti valaisee mahdollisuuksia ja käyttötarkoituksia moiselle. Kesäkurssilla 2007 demo 4:n yhteydessä oli myös toinen osio: Harjoitustyöohje on nyt julkaistu; sitä saattoi käydä läpi demossa. Omasta harjoitustyöstä tulee yksi piste tenttiin, jos sen saa aikarajaan mennessä palautettua. 1

2 Skriptit Tuolla on lisätietoa; hyvän näköinen intro: http://steve-parker.org/sh/sh.shtml Tuolla on myös; kattavan oloinen saitti: http://www.shelldorado.com/ Siellä on esimerkkejä ym. Ja Googlella löytyy lisää. 2.1 Esim: Bourne Shellin rakenteita esimerkkikoodina Tämän kertaiset esimerkkikoodit ovat paketissa demo4.zip kurssin kotisivulla. Siis jalavassa saat paketin esim. näin: wget http://www.cc.jyu.fi/~nieminen/kj07kesa/demo4.zip unzip demo4.zip Skripti shrakenteita.sh demonstroi ohjelmointirakenteita Bourne Shellissä, ja se on samalla pieni esimerkki ympäristömuuttujasta (environment variable). 2.2 Esim: apuohjelma find Usein skripteissä ei kannata yrittääkään tehdä kaikkea shellin rajallisilla ohjelmointiominaisuuksilla, vaan kannattaa käyttää apuohjelmia. Täytyy tosin muistaa myös, että kaikkia apuohjelmia ei ole asennettu kaikkialle, ja niiden eri versiot voivat erota toisistaan esim. argumenttien muodon suhteen. Yhteensopivien ja alustariippumattomien skriptien tekeminen on pidemmän päälle taito- ja tietolaji. Katsotaan kuitenkin kahta kätevää työkalua: find ja grep. Yhdessä nämä ohjelmat tarjoavat samanlaista toiminnallisuutta kuin esim. Windowsin etsintätyökalu (se, jossa on defaulttina sellainen söpö kultakarvainen koira-animaatio, joka hyppii ja hymyilee ja heiluttaa häntää sekä painajaismuistojeni mukaan myös läähättää). Tietysti näitä komentorivityökaluja voi liittää skripteihin, jolloin mahdollistuu paljon automaattista tietojenkäsittelyä (ATK), mikä on eri asia kuin Animaation Tuijottelu, vaikkapa Koiran (ATK). Ehkä edellämainittu oli viimeinen Asenteellisuudessaan Tuomittava Kommenttini tällä ATK-kurssilla. Find etsii tiedostoja argumenttina annettujen ehtojen mukaisesti. Se on asennettu useisiin unixeihin. Tässä henkilökohtaiseen tietoturvaan liittyvä esimerkki: #!/bin/sh find $HOME -maxdepth 1 -type d -\! -name ".*" \ 2

while read a do chmod go-rwx $a done Tämän skriptin find -komento etsii kotihakemistossa ($HOME) olevat hakemistot (-type d), joiden nimi ei ala pisteellä (-\! -name ".*", jättää siis piilotiedostot huomioimatta), ja syöttää tulosteensa putkella sh-shellin while -toistorakenteelle. Jokaisen findin löytämän hakemiston kohdalla poistetaan hakemistolta kaikki oikeudet kaikilta muilta kuin käyttäjältä itseltään (chmod go-rwx). Find rajoittaa tiedostojen etsimisen kotihakemiston sisältämiin hakemistoihin menemättä alihakemistoihin (-maxdepth 1). Tämä nyt oli vain yksi esimerkki... 2.3 Esim: apuohjelma grep Grep on toinen kätevä, aika usein saatavilla oleva apuohjelma. Sillä etsitään tiedostoista rivejä, joilla on tietynlaista tekstiä. Aion selata Käyttöjärjestelmät -kurssin harjoitustyöt läpi skriptillä, (tai jollain vastaavalla) joka sisältää seuraavan rivin (tai jotain vastaavaa): # Tulostetaan opiskelijan tuottamat vastausrivit: grep -n -B2 -A3 "HARKKA:" $1 Eli grepillä voi etsiä tekstitiedostoista rivejä, joilla on merkkijono. Hyödylliseksi grepin käyttö muuttuu siinä vaiheessa, kun ymmärretään, että sillä voi etsiä täsmällisen merkkijonon sijasta sanarunkoja. Esimerkiksi rivit, joilla on HAR, sitten mitä tahansa merkkejä ja ainakin yksi kaksoispiste: grep "HAR.*:" fname.txt Tai itse asiassa mitä tahansa ns. säännöllisten lausekkeiden mukaisia merkkijonovastaavuuksia: grep "[Hh]a[r]*joitus[t T]*yö[A-Za-zöäåÖÄÅ]*:" fname.txt Em. komento löytäisi rivit, joilla on esimerkiksi jokin seuraavista merkkijonoista: Harjoitustyö: harjoitustyö: Hajoitustyö: harrrrrrjoitus yöllä: Harjoitus työläs:... 3

[reunahuomautus: Säännölliset lausekkeet (regular expressions, RegEx ) kannattaa jossain vaiheessa opetella, jos ei vielä ole tulleet vastaan. Niitä käytetään mm. Javan merkkijonoluokkien match -metodeissa ja ylipäätään aika monessa paikassa. Ne muuttuvat vielä tehokkaammiksi siinä vaiheessa, kun oppii käyttämään ns. ryhmiä (groups) joiden avulla voi korvata regexpin osien sisältöjä uudella tekstillä, toisillaan tai vaihtaa niitä keskenään, tai ylipäätään ottaa niitä irti tietorakenteisiin käsittelyä varten. Säännöllisten lausekkeiden teoriaa ja koneiston toteutusta meillä sisältyy kurssiin nimeltä Automaatit ja kieliopit. Niiden käyttötaito kuuluu joka tapauksessa IT-yleissivistykseen.] 2.4 Palautustehtävä Yhden pisteen arvoisena palautustehtävänä voit muokata demo1:n lisukemateriaalissa ollutta grafiikkaskriptiä seuraavin tavoin: Rajoituksia: skriptin pitää tarkistaa, onko kukin väliaikainen tiedosto jo olemassa eikä tehdä sitä uudelleen enää, jos se on. skriptin pitää tarkistaa, onko komento muotoa./mun.sh --removetemps ja siinä tapauksessa poistaa kaikki väliaikaiset kuvatiedostot eikä tehdä mitään muuta. skriptiä pitää voida käyttää muodossa./mun.sh --times 4 eli ensimmäinen argumentti --times ja toinen argumentti numero, jolloin skriptin pitää tehdä kuvasta useita erilaisia kopioita numeroparametrissa kerrottu määrä. Riittää, että tehdään vain otsikkorannusta eri nimisiä kopioita; muiden väliaikaisten tiedostojen päälle voi kirjoittaa samalle nimelle jokaisella kierroksella. Ne on siis generoitava uudelleen niin että plasmaefekti ja bitit ovat satunnaiset ja erilaiset joka kerta. Tulostiedostot on nimettävä otsikkorantu_n.jpg missä N on numero 1, 2,... viimeisenä parametrinä annettu luku. Väärin syötettyjä argumentteja ei tarvitse nyt tarkistaa, vaikka oikeasti skriptin kuuluisi kaikki sellainen tehdä; muuten sen kanssa joutuisi pitkällä tähtäimellä vaikeuksiin! Koodia ja huomioitavaa tulisi kuitenkin liikaa tämän kurssin tavoitteisiin nähden. Meillä on ajoittain (vai satunnaisin väliajoin?) luennoitava jatkokurssi shellohjelmoinnista. Asiaa voi myös opiskella lisää itsenäisesti, kuten mitä tahansa... Ei tarvitse tehdä mitään ihmeellisiä muutoksia mun höperöön esimerkkiskriptiin, eli esim. väliaikaiset tiedostot käsitellään nyt työskentelyhakemistossa. Oikeasti ne pitäisi laittaa /tmp/ -nimiseen hakemistoon (ja ne pitäisi nimetä niin että yhdenaikaisesta suorituksesta ei tule synkronointiongelmaa eli samaa skriptiä pitäisi voida ajaa eri käyttäjien toimesta yhtäaikaa... eli ei pidä joutua vahingossa käyttämään väliaikaisia tiedostoja jaettuna resurssina) ja täytyisi 4

huolehtia, että ne aina poistetaan esim. jos skripti lopetetaan kesken antamalla sille signaali... Nyt ei tarvitse näistä huolehtia... Oikeissa töissä kuitenkin sitten tehdään asiat kunnolla, eikö niin... :-) Näissä tulee tutuksi Bourne Shellin perusrakenteet. Niihin on pikabriiffi tämän demomateriaalin lopussa, ohjausta saa tilaisuuksissa tarvittaessa, ja netti on pullollaan materiaalia skriptiohjelmoinnista. Palauta mail-ohjelmalla jalavasta siten kuin aiemmatkin harkat; sähköpostin otsikoksi tällä kertaa neljas vastaukseni (huomaa a-kirjain, ei ääkkönen!). +1 piste ekaan tenttiyritykseen, jos palautus on tehty ennen kesän ensimmäistä tenttikertaa. 3 Harjoitustyö Tämän osion ohjeet ovat harjoitustyöohjeessa. Palautustehtävä: Palauta harkkasi työohjeessa ilmoitetulla tavalla 26.7.2007 klo 23:59 mennessä (ennen kesän ensimmäistä tenttipäivää), niin saat +1 pistettä tenttiin. 5

4 Liite: Yhden sivun sh-luntti Alla on tentinkin liitteenä jaettava lunttilappu, jossa esimerkkien kautta muistutetaan joistakin Bourne Shellin piirteistä. HUOM: Tarkoituksella tenttiluntissa ei tulla mainitsemaan sitä, että skriptin ensimmäisellä rivillä pitää kertoa, millä nimenomaisella shellillä se ajetaan... Se pitää kuitenkin vastauksessa olla, oikealla syntaksilla ja siitä paikasta, josta yleensä Bourne Shell -ohjelma löytyy eli #!/bin/sh. Siitä tietää, onko aihetta yhtään opeteltu, mietitty ja tehty (tai edes nähty tämä demopaperi tai skripteistä kertonut luento...) vai yritetäänkö vaan sommitella palikoita paikoilleen kylmiltään. Joitakin ohjelmointirakenteita: muuttuja=57 # tarkka syntaksista: ei välilyöntejä! muuttuja="eki"; muuttuja="$muuttuja$muuttuja" if EHTO # Myös: if EHTO; then...; \ then # elif EHTO; then...; fi... # fi # for muuttuja in LISTA # muttujan "esittelyssä" /asetuksessa ei $ do... jotakin $muuttuja jotakin... # muuttujan käytössä $muuttuja done while EHTO; do... ;... ; done # käskyerotin rivinvaihto tai ; # Tee jotain syötteen kaikille riveille: while read rivi; do echo "luin: $rivi" ; done < rivit.txt case $hanen_nimensa in kirsimarja) echo "Hei Kippe" ;; eskomatias) echo "Moi E.M." ;; esac Aliohjelmat mahdollisia&hyödyllisiä, mutta ei käsitellä ITKA203:lla. Joidenkin ehtojen käyttöä (Välilyönnit merkityksellisiä! "[" on itse asiassa komento ja loppuosa on sen argumenttilista!): [ -d TIEDOSTONIMI ] # tosi, jos on hakemisto [ -f TIEDOSTONIMI ] # tosi, jos on tavallinen tiedosto [! -f TIEDOSTONIMI ] # tosi, jos ei olemassa tai ei tavallinen [ "$muuttuja" -le "57" ] # tosi, jos muuttuja <= 57 (myös lt,gt,ge) Argumenttien käyttö: (yli 9 arg mahd., mutta ei käsitellä ITKA203:lla) echo "Tämän skriptin nimi on $0. Eka argumentti $1, neljäs $4" Joitakin sisäänrakennettuja toimintoja: exit VIRHEKOODI # koodi 0 tarkoittaa onnistumista cd # vaihtaa skriptin työhakemistoa echo # kaiuttaa tekstiä let muuttuja=$muuttuja+3 # (perusaritmetiikkaa) Erikoismerkkejä (tuttuja interaktiivisesta käytöstä; toimii skripteissä): < > >> KOMENTO 6