Kieliteknologian ATK-ympäristö Viides luento Miikka Silfverberg Nykykielten laitos 3. lokakuuta 2011 Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 5 3. lokakuuta 2011 1 / 1
Viides luento Parametrisoidut skriptit. eli miten saadaan skripti ottamaan syötteeksi tiedosto(ja) ja muita määritteitä? $./laske frekvenssilista mehiläisten elämä.txt Skriptien asentaminen. eli miten voidaan käyttää skriptiä mistä tahansa ilman että aina täytyy kertoa mistä hakemistosta se löytyy. $ laske frekvenssilista mehiläisten elämä.txt Ympäristömuuttujat esim. $PATH ja $HOME. Miten muokataan ympäristömuuttujia ja asetetaan omia ympäistömuuttujia? export. Käynnistystiedostot /.bashrc ja /.bash profile. Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 5 3. lokakuuta 2011 2 / 1
Skriptin yhdeksän ensimmäistä komentoriviargumenttia tallentuvat automaattisesti muuttujiin $1 - $9 ja skriptin nimi muuttujaan $0. $ cat tulosta argumentit.sh #! /bin/bash echo $1 $2 $3 $ chmod u+x tulosta argumentit.sh $./tulosta argumentit.sh eka toka kolmas Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 5 3. lokakuuta 2011 3 / 1 Muuttujat ja komentoriviargumentit skriptissä Skriptissä voi määritellä n.s. muuttujan eli otuksen jolla on nimi ja arvo. $ cat tulosta muuttuja.sh #! /bin/bash virke= unix on superkiva juttu! echo $virke $ chmod u+x tulosta muuttuja.sh $./tulosta muuttuja.sh unix on superkiva juttu!
Muuttujat ja komentoriviargumentit skriptissä $ cat laske frekvenssilista.sh #! /bin/bash echo "Luetaan tiedosto $1." 1>&2 echo "Kirjoitetaan frekvenssilista tiedostoon $2." 1>&2 cat $1 tr -s \t\r\n \n tr A-ZÅÄÖ a-zåäö sort uniq -c sort -nr > $2 $ chmod u+x laske frekvenssilista.sh $./laske frekvenssilista.sh mehiläisten elämä.txt mehiläisten elämä.txt.freq Luetaan tiedosto mehiläisten elämä.txt. Kirjoitetaan frekvenssilista tiedostoon mehiläisten elämä.txt.freq. Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 5 3. lokakuuta 2011 4 / 1
Skriptien asentaminen Nyt tehdään pieni temppu. Monisteen loppu selittää tätä tempun. 1 Tarkistetaan että kotihakemistossa on alihakemisto bin (muutoin luodaan sellainen). 2 Avataan kotihakemistossa sijaitseva tiedosto.bash profile ja lisäätään sen loppuun rivi. /.bashrc 3 Avataan tiedosto.bashrc ja lisätään sen loppuun rivi export PATH=$PATH:$HOME/bin 4 Kirjaudutaan ulos ja otetaan uudestaan yhteys hipulle. 5 Jos käyttäjän oletus-shell ei ollut bash, ajetaan komento bash. Tällä tempulla lisäsimme kotihakemiston alihakemiston bin ympäristömuuttujaan PATH. Useimmissa järjestelmissä (muttei hipulla) tämä tehdään oletusarvoisesti. Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 5 3. lokakuuta 2011 5 / 1
Komento which kertoo mihin skripti tai ohjelma on asennettu $ which laske frekvenssilista.sh /home/u3/silfverb/bin/laske frekvenssilista.sh $ which cat Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 5 3. lokakuuta 2011 6 / 1 Skriptien asentaminen Kun skripti on asennettu, ei tarvitse muistaa missä hakemistossa se on vaan sitä voi käyttää yhtä helposti mistä vaan. Skripti asennetaan kopioimalla se kotihakemiston alihakemistoon bin. $ cp laske frekvenssilista.sh /bin $ laske frekvenssilista.sh mehiläisten elämä.txt mehiläisten elämä.txt.freq Jos on root, voi asentaa skriptejä myös muualle kuten hakemistoihin /bin ja /usr/bin. Tavallisella käyttäjällä ei kuitenkaan ole kirjoitusoikeutta näihin hakemistohin, joten pitää tyytyä asentamaan omaan kotihakemistoon.
Käskyllä $ FRUIT=mango määritellään ympäristömuuttuja FRUIT jonka arvo on mango. Arvon voi tulostaa käskyllä $ echo $FRUIT Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 5 3. lokakuuta 2011 7 / 1 Ympäristömuuttujat Miten komentotulkki tietää etsiä skriptiä laske frekvenssilista.sh kotihakemiston alihakemistosta bin? Vastaus on että se etsii skriptiä kaikista hakemistoista jotka on mainittu ympäristömuuttujan PATH arvossa. $ echo $PATH...:/home/u3/silfverb/bin Ympäristömuuttujat muotoilevat käyttäjän ympäristöä ja antavat käynnistetyille ohjelmille tietoa käyttäjästä. Komento export ilman argumentteja kertoo mitä kaikkia ympäristömuutujia on määritelty (hipulla näitä on aikamoinen määrä).
$ export FRUIT=mango $./skripti.sh mango Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 5 3. lokakuuta 2011 8 / 1 Ympäristömuuttujat Aiemmassa kalvossa määriteltiin n.s. lokaalinen muuttuja. Se on olemassa ainoastaan siinä bash-prosessissa, jossa se on määritelty. Koska jokainen skripti käynnistää oman bash-prosessinsa, muuttuja ei ole määritelty niissä. Käskyllä $ export FRUIT=mango määritellään globaali ympäristömuuttuja, joka on voimassa myös kaikissa bash-prosesseissa jotka käynnistetään tästä bash-prosessista käsin. $ cat skripti.sh #! /bin/bash echo $FRUIT $ FRUIT=mango $./skripti.sh
Ympäristömuuttujat Esimerkkejä ympäristömuuttujista: PATH Kertoo mistä suoritettavia tiedostoja (eli ohjelmia ja skriptejä) etsitään. HOME Kertoo kotihakemiston. PS1 Säätää komentotulkin promptia. PWD Kertoo nykyisen hakemiston. USER Kertoo käyttäjätunnuksen. SHELL Kertoo mikä komentotulkki on käytössä (esim. bash). Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 5 3. lokakuuta 2011 9 / 1
Käynnistystiedostot Vaikka ympäristömuuttujan määritteleekin käskyllä export, se on voimassa vain kyseisen istunnon ajan. Jos siis haluaa pysyvästi määritellä uuden muuttujan tai muokata vanhan muuttujan arvoa, pitää löytää tapa ajaa export-käsky automaattisesti jokaisen sisäänkirjautumisen yhteydessä. Komentotulkki bash lukee käynnistyessään kotihakemistosta n.s. käynnistystiedoston ja suorittaa käynnistystiedostossa olevat käskyt. Sisäänkirjautumisen yhteydessä se lukee tiedoston.bash profile. Jos käynnistetään uusi bash ilman sisäänkirjautumista, bash lukee käynnistystiedoston.bashrc. Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 5 3. lokakuuta 2011 10 / 1
Käynnistystiedostot Yleensä halutaan aina suorittaa.bashrc-tiedoston käskyt kun uusi bash käynnistetään vaikka joskus halutaankin suorittaa lisäkäskyjä sisäänkirjautumisen yhteydessä. Siksi.bash profile tiedostoon lisätään rivi. /.bashrc Tällä tuodaan.bashrc tiedosto osaksi.bash profile-tiedostoa. Näin uudet määrittelyt voi aina tehdä pelkästään.bashrc-tiedostoon ja ne ovat voimassa myös sisäänkirjautumisen jälkeen. Lisätään rivi export FRUIT=mango tiedostoon.bashrc ja kirjaudutaan ulos ja otetaan uudestaan yhteys hipulle. Nyt $ echo $FRUIT mango Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 5 3. lokakuuta 2011 11 / 1
Kalvon 5 tempun selitys Nyt tiedämme niin paljon että ymmärrämme mitä kalvossa 5 tehtiin. Olemassaolevan ympäristömuuttujan PATH arvoksi asetettiin sen vanha arvo + : + $HOME/bin eli export PATH=$PATH:$HOME/bin Käytännössä tämä tarkoittaa sitä että komentotulkille kerrottiin että sen pitää etsiä suoritettavia ohjelmia myös oman kotihakemiston alihakemistosta bin. Muuttujan arvo muutettiin export-komennolla jotta muutokset näkyvät myös komentotulkista käynnistetyissä prosesseissa. Muutos tehtiin.bashrc-tiedostoon ja.bashrcn käskyt tuotiin osaksi.bash profile-tiedostoa, jotta muutos olisi voimassa aina kun käynnistetään uusi bash. Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 5 3. lokakuuta 2011 12 / 1