Unix ja shell-ohjelmointi 16.3.2001
Unix ja shell-ohjelmointi 16.3.2001
KATSO TOIMINTAOHJEET KÄÄNTÖPUOLELTA!
Huom. Ratkaisuissa saa käyttää vain luennoilla esiteltyjä komentoja,
ei perliä tai komentojen Gnu- tai Linux-spesifisiä ominaisuuksia.
- Kirjoita skripti, joka
- etsii tiedostosta rivit, joiden ensimmäinen ja
viimeinen ei-tyhjä merkki on sama. (Tyhjä tarkoittaa
välilyöntiä tai tabulaattoria.)
(2p)
- tulostaa argumenttina annetusta liukuluvusta
mantissan itseisarvon (poistaa mahdollisen etumerkin ja eksponentin,
+12.34e-57:sta tulisi 12.34).
Eksponenttimerkki voi olla iso tai pieni e.
Luvun oikeellisuutta ei tarvitse tarkistaa.
Testausapuna ohessa tiedosto floats.txt
jossa on liukulukuja ja niiden mantissoja.
(2p)
- etsii pelkkiä numeroita (yksi kokonaisluku per rivi) sisältävistä
tiedostoista kaikki neljällä tasan jaolliset luvut.
Tiedostossa mahdollisesti oleviin muunlaisiin riveihin ei
tarvitse varautua. Testausavuksi ohessa on tiedosto
integers.txt.
(2p)
- Kirjoita skripti, joka
- etsii annetun hakemiston alta tavalliset tiedostot,
joita on muutettu tänään (skriptin ajopäivänä) kello 08:00 jälkeen. (3p)
- poistaa tiedostonimien lopusta puolipisteellä erotetut
versionumerot (esim. file1.txt;1:sta tulisi file1.txt).
Jos versionumeroa lukuunottamatta samannimisiä tiedostoja
on useita, tulostetaan sopiva virheilmoitus ja jätetään ko. tiedostot
sikseen. Voit olettaa että viimeisen puolipisteen perässä ei voi
olla muuta kuin versionumero. (3p)
- Kirjoita skripti, joka
- lajittelee henkilötunnuksia sisältävän
tiedoston syntymäajan mukaiseen järjestykseen, samana päivänä
syntyneet
järjestysnumeron mukaan. Tunnusten oikeellisuutta ei tarvitse
tarkistaa.
(Henkilötunnus on muotoa ppkkvvsnnnt, missä
pp on syntymäpäivä, kk kuukausi, vv vuosi,
s vuosisata, +=1800, -=1900, A=2000,
nnn järjestysnumero joka on naisilla parillinen ja
miehillä pariton, ja tarkistusmerkki t jolla ei tässä
ole merkitystä.)
Testaukseen voit käyttää tiedostoja hetuja.txt
ja hetuja.sorted-a (samat tunnukset oikein lajiteltuina).
(3p)
-
kuten edellä mutta samana päivänä syntyneet pitää lajitella
ensisijaisesti sukupuolen mukaan, naiset ensin.
Testiaineistoksi käy sama hetuja.txt kuin edellä,
haluttu tulos löytyy nyt tiedostosta hetuja.sorted-b.
(3p)
- Kirjoita skripti, joka testaa käyttäjän laskutaitoja pienillä
kokonaisluvuilla (esim. enintään 3-numeroisilla) siten, että se arpoo
satunnaisen laskutehtävän (yhteen-, vähennys-, kerto- tai jakolasku),
kysyy sitä käyttäjältä ja tarkistaa vastauksen. Vastauksen ollessa
väärä samaa kysytään uudestaan, jos vastaus on toistamiseen väärä
kerrotaan käyttäjälle oikea vastaus. Argumenttina annetaan kysymysten
määrä, lopussa tulostetaan onnistumisprosentti.
Jakolaskutehtävät pitää muodostaa niin, että jako menee tasan.
Satunnaislukujen generoimiseen voi käyttää ksh:n ja bash:in
satunnaismuuttujaa $RANDOM, joka palauttaa satunnaisen
kokonaisluvun väliltä 0... 32767.
(6p)
- Kirjoita skripti, joka
muuttaa annetuissa tiedostoissa tai stdinissä
tekstin seassa olevat %xx -koodatut merkit,
missä xx on merkin heksadesimaalikoodi, vastaavaksi
merkiksi. Testausapuna tiedosto heksaa.txt
ja haluttu tulos unhexed.txt.
(6p)
Normaalit tenttejä koskevat säännöt ovat voimassa seuraavin poikkeuksin:
- Mukana saa olla kirjallisuutta, muistiinpanoja jne, rajoituksena
vain että niiden levittely ei saa häiritä muita. Yhteistyö ei
muutenkaan ole sallittua kuten ei tenteissä yleensäkään.
- Aloita kirjoittamalla nimesi jne konseptiin normaaliin tapaan.
Itse vastauksia ei kuitenkaan tarvitse siihen kirjoittaa (ks. alla).
Tehtävät jaetaan paperilla normaaliin tapaan, minkä lisäksi ne
löytyvät koneesta.
- Jokaisella on käytössään mikro jossa pyörii Linux (riisuttu
RedHat 7.0; käytettävissä on ainakin ksh (pdksh) ja bash sekä joukko
yleisiä editoreita, ainakin emacs, pico ja vi). Verkkoyhteyttä
ulos ei ole.
- Aloitettaessa koneessa on ikkuna joka kysyy nimeäsi ja
syntymäaikaasi. Vastaa siihen, klikkaa OK ja auki jää
pääteikkuna sekä Netscape, jossa on näkyvissä kopio kurssin
kotisivusta.
- Tehtävät pitää tehdä koneella siten, että kunkin tehtävän vastaus
tulee tiedostoon jonka nimi on tehtävän numero (esim. "1a", "5" jne)
kotihakemiston alihakemistoon "vast". Jos vastaukseksi tarvitaan
useampia tiedostoja, ne on sijoitettava samaan paikkaan ja nimettävä
tyyliin "3a-1" jne.
- Käytettävissä on apuohjelma "tarkista", joka tarkistaa että
vastaukset ovat oikeassa paikassa (mutta ei niiden oikeellisuutta).
- Jos aikaa jää, voit täyttää kurssikyselyn, joka löytyy klikkaamalla
Netscapessa ensin [Home] ja sitten kohtaa "Kurssikysely".
(Vastaukset menevät nimettöminä suoraan kurssia arvioivalle työryhmälle.)
- Kun olet valmis, anna komento "tulosta", joka printtaa vastauksesi
luokan edustalla olevalle printterille. Tentin valvoja ottaa sen
sieltä ja laittaa lähtiessäsi konseptisi väliin. (Printterin käyttö
muuten tentin aikana on kielletty.)
- Jos koneesi menee totaalisesti jumiin, kaatuu tms, voit pyytää valvojaa
hälyttämään apua (= minut). Muuten valvoja ei voi auttaa koneen kanssa.
Malliratkaisut ja arvosteluperusteet
löytyvät täältä.