Bash-harjoituksia
Asetustiedostoja
Bash suorittaa muutaman tiedoston käynnistyessään. Näissä määritellään muutamia
asetuksia. Näistä voi olla /etc/
-hakemistossa versio, joka suoritetaan kaikille
käyttäjille ja käyttäjän kotihakemistossa versio, jota käyttäjä voi itse muokata.
Kotihakemistossa olevien asetustiedostojen nimet alkavat yleensä pisteellä, jolloin ne
ovat piilotiedostoja. Ne eivät siis näy oletuksena ls
-komennolla tai
graafisessa tiedostonhallinnassa.
.bash_profile
- Suoritetaan, jos Bash on login-shell. Kaikille suoritettava versio:
/etc/profile
sekä hakemiston/etc/profile.d/
-sisältö. .bashrc
- Suoritetaan Bashin käynnistyessä. Kaikille suoritettava versio:
/etc/bash.bashrc
.bash_aliases
- Tiedosto, johon käyttäjä voi lisätä omia aliaksia.
.bash_logout
- Tiedosto, jonka sisältö suoritetaan, kun login-shell lopetetaan.
Asetuksia ympäristömuuttujissa
Tiedostossa .bashrc
asetetaan muun muassa muutamia ympäristömuuttujia, joilla
vaikutetaan Bashin toimintaan.
$PATH
- Muuttuja, jonka sisältö on luettelo hakemistopolkuja eroteltuna kaksoispisteillä (:). Kun ohjelmaa yritetään käynnistää (ilman polkua), sitä yritetään etsiä näistä hakemistoista tässä järjestyksessä.
$HISTSIZE
- Komentohistorian koko. Ubuntussa oletuksena 1000
$PS1
- Komentokehotteeseen tulostuva teksti. Voi sisältää erilaisia erikoismerkkejä päivämäärää, kellonaikaa, nykyistä hakemistoa yms. varten.
$PATH
-muuttuja
Tee kotihakemistoon hakemisto bin
cd ~
mkdir bin
Lisää tämä hakemisto $PATH
-muuttujaan. Avaa editoriin tiedosto .bashrc
, ja lisää
loppuun rivi:
PATH=$PATH:~/bin
Avaa uusi terminaali ja tarkista $PATH
-muuttujan arvo:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/pesasa/bin
Nyt voit tehdä omia skriptejä tähän hakemistoon ja ne voi käynnistää suoraan nimellä ilman polkua.
Harjoituksia
Harjoitustehtävät
Tee kaksi kappaletta harjoitustehtävistä 1-5 joko yksin taikka kahden tai kolmen ryhmissä. Toteuta tehtävät joko Bash-skripteinä tai aliaksina.
- Skripti, joka tulostaa viisi satunnaista lottoriviä. Tulosta rivien numerot suuruusjärjestyksessä.
- Asenna paketit
fortune-mod
,fortunes
sekäcowsay
. Tee asetuksiisi sellainen muutos, että aina uuden terminaalin avatessa tulostetaanfortune
-ohjelman tuottama teksticowsay
-ohjelman tekemässä puhekuplassa. - Tee skripti, joka simuloi kahta nopanheittoa, eli tulostaa kaksi lukua väliltä 1-6, sekä kysyy käyttäjältä niiden summan ja tarkistaa vastauksen.
- Kalenteri / TODO-lista
- Tee skripti
todo
, joka etsii kotihakemistossa olevasta tiedostosta.todolist
muotoa2012-11-01: Linux-kurssi
olevista riveistä ne, jotka koskevat senhetkistä päivää ja tulostaa ne ilman päivämäärää, kaksoispistettä ja välilyöntiä. Lisää tämä skripti terminaalin käynnistykseen. - Tee skripti
todoadd
, joka lisää kotihakemistossa olevaan tiedostoon.todolist
uuden rivin, joka alkaa nykyisellä päivämäärällä (muodossa 2012-11-01), kaksoispisteellä ja välilyönnillä ja jatkuu komentorivillä annetulla tekstillä. Toteuta tämä vielä niin, että tiedoston rivit ovat päivämäärän mukaan järjestyksessä. - * Tee skripti
todoweek
, joka toimii muuten, kutentodo
, mutta tulostaa seuraavan seitsemän päivän ajalta kaikki TODO-merkinnät sekä päivämäärät väliotsikkoina.
- Tee skripti
- Skripti, joka arpoo kolme kertaa sadan kolikonheiton sarjan ja tulostaa kunkin sarjan tuloksen. Esimerkiksi:
45 klaava
55 kruuna
Vihjeitä
tr
-ohjelma korvaa käsketyt merkit toisilla. Esim.echo 'Moi vaan'| tr 'Moa' 'Hee'
tulostaaHei veen
.tr
-ohjelmalla voi poistaa pyydetyt merkit. Esim.echo "Hihhei" | tr -d 'h'
tulostaaHiei
.sort -R
järjestää syötteen rivit satunnaisesti.- Muuttuja
$RANDOM
palauttaa satunnaisen kokonaisluvun väliltä 0-32767. cal
-ohjelma tulostaa kalenterin tekstimuodossa. Kokeilecal
,cal 2014
jaLC_TIME=fi_FI.UTF-8 cal
Vihjeitä: tekstirivin poiminta
Monirivisestä tekstistä voi poimia rivin, jolla etsitty hakutermi esiintyy,
ohjelmalla grep
.
Esimerkiksi:
grep nobody /etc/passwd
cat /etc/passwd | grep nobody
Tulosteeseen voi pyytää n riviä löydetyn rivin edeltä "vivulla" -B n
(B=before)
ja m riviä löydetyn rivin jälkeen "vivulla" -A m
(A=after).
Esim:
grep -B 1 -A 3 nobody /etc/passwd
Haun voi rajoittaa rivin alkuun lisäämällä ^
-merkin hakusanan eteen ja rivin
loppuun lisäämällä $
-merkin hakusanan perään.
Esim:
grep ^no /etc/passwd
grep false$ /etc/passwd
Vihjeitä muuttujista
Muuttujassa $oma
olevaa tekstiä voidaan muuttaa esim. seuraavilla tavoilla:
${oma/kaava/teksti}
palauttaa muuttujan$oma
sisällön niin, että ensimmäinen mahdollisimman pitkä tekstinkaava
kuvaama merkkijono on korvattu merkkijonolla ´teksti`. Kaavassa voi käyttää jokerimerkkejä, kuten tiedostonimen täydennyksessä.${oma//kaava/teksti}
toimii samoin, mutta korvaa kaikki löydetyt kaavaan sopivat tekstit, ei vain ensimmäistä.${oma#kaava}
palauttaa muuttujan$oma
sisällön niin, että sen alusta on poistettu lyhin kaavaan sopiva merkkijono.${oma##kaava}
palauttaa muuttujan$oma
sisällön niin, että sen alusta on poistettu pisin kaavaan sopiva merkkijono.${oma%kaava}
palauttaa muuttujan$oma
sisällön niin, että sen lopusta on poistettu lyhin kaavaan sopiva merkkijono.${oma%%kaava}
palauttaa muuttujan$oma
sisällön niin, että sen lopusta on poistettu pisin kaavaan sopiva merkkijono.${oma:n}
palauttaa muuttujan$oma
sisällön n:nnestä merkistä alkaen. (Numerointi alkaa 0:sta!)${oma:n:k}
palauttaa muuttujan$oma
sisällöstä k merkkiä n:nnestä merkistä alkaen. (Numerointi alkaa 0:sta!)
Vihjeitä laskentaan
$((lauseke))
palauttaa matemaattisen lausekkeen arvon. Käsittelee kokonaislukuina ja esimerkiksi jakolaskujen tuloksista katkaistaan desimaaliosa pois. Esim.echo $((5/2)) 2 echo $((4+6/2)) 7
Vihjeitä: päivämäärä
date
-ohjelmalta voi pyytää päivämäärän halutussa muodossa. Esimerkiksi:
date +%Y-%m-%d
2014-03-12
Tulostusmallissa: %Y = vuosi, %m = kuukausi, %d = päivä
Lisää ohjeita: man date
Date:lta voi pyytää myös muun ajan kuin nykyisen. Esim:
date --date="tomorrow"
date --date="3 days"
date --date="5hours"
date --date="6hours 30 minutes"
Vihjeitä: komentoriviparametrit
- Komentorivillä skriptille annetut parametrit ovat käytettävissä muuttujina
$1
,$2
,... - Itse ohjelman / skriptin nimi on
$0
- Kaikki parametrit yhdessä on
$@
Vihjeitä: echo
ja escape-merkit
echo
-komennolla tulostettaviin merkkijonoihin voi lisätä escape-merkkejä,
joilla voi muotoilla tulostusta. Komennolle on annettava lisämääre ´-e´,
jotta se osaa näyttää nämä muotoilut.
\n
: rivinvaihto (ja paluu rivin alkuun).\r
: paluu rivin alkuun (vaihtamatta uudelle riville)\t
: sarkain (eli tabulaattori)\v
: pystytabulointi, eli siirtyminen seuraavalle riville menemättä rivin alkuun\b
: backspace, eli siirtyminen yhden merkin vasemmalle (ei pyyhi)
echo -e "Moi\thei\vkukkuu\ralussa\ntokstiä\b\b\b\b\b\be"
Moi hei
alussa kukkuu
tekstiä
Vihjeitä: echo
ja värejä
echo
-komennolla voi käyttää myös väreä sopivilla escape-komennoilla.
Tulostukseen voi lisätä tulostuksen väriä vaihtavia komentoja laittamalla värikoodi
tekstin \033[
perään. Värin käyttö lopetetaan vaihtamalla takaisin oletusväreiksi
merkinnällä: \033[0m
Esimerkiksi:
echo -e "\033[1;31mKukkuu\033[0m kaikille \033[0;32mteille\033[0m"
Käytettävissä olevat värit:
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
Tehtäviä
Tehtävät 13
Tee edellä luetelluista harjoitustehtävistä ainakin kaksi.
Tehtävät voi tehdä yksin taikka kahden tai kolmen opiskelijan ryhmissä.
Linkkejä: