
Ymmärtämisen kautta tehokäyttöön
Ohjelmointirakenteet
Komentotulkissa on myös oma yksinkertainen ohjelmointikielensä, jonka avulla voidaan komentoja yhdistellä mutkikkaammilla tavoilla "ohjelmiksi", shell-scripteiksi.Esimerkki shell-scriptistä
#!/bin/sh
# Convert mac text files to unix text files
# Hannu.Aronsson@iki.fi
# Huom: Virheiden käsittely puuttuu!
for i
do
recode latin1:mac "$i"
tr '\012' '\015' < "$i" > "$i.tmp" # LF -> CR
cp "$i.tmp" "$i" # save modes this way
rm "$i.tmp"
ls -l "$i"
done
Kovin mutkikkaita ohjelmia ei kannata tehdä shell-scripteinä, mutta pieniin usein toistuviin perustöihin ne ovat varsin käteviä.
Huomaa, että näitä ohjausrakenteita voi kirjoittaa suoraan komentoriviltäkin, joka on usein kätevää.SHELL-SCRIPTIT
Unix-komentoja on usein hyvin helppo yhdistellä shell-scripteiksi, jolloin vähällä vaivalla saa suhteellisen käteviä lisätyökaluja rakennettua.
Komentotulkki (shell) on myös ohjelmointikieli, joskin aika yksinkertainen. Jos osaa käyttää komentoja, on shell-scriptien tekeminen aika helppoa. Muut hienommat työkalut (kuten Perl) vaativat yleensä erikseen opettelua.
Unix osaa automaattisesti ajaa scriptin sen tulkitsemisen osaavalla ohjelmalla, jos tekstitiedoston ensimmäinen rivi on muotoa #!/polku/ohjelmaan . Tällöin ko. scriptitiedoston "ajaminen" tekee saman, kuin jos olisi antanut komennon /polku/ohjelmaan scriptitiedosto. Tämä on erittäin kätevää, komennot voivat olla joko scriptejä tai "oikeita" komentoja, mutta käyttäjän ei tarvitse sitä tietää.Tehokkuudesta
Ohjelmoidessa kannattaa pitää mielessä myös se, että ohjelman (tai scriptin) tekemiseen menee aikaa. Ohjelmoijan, työntekijän aika on nykyään kalliimpaa kuin tietokoneen aika.
Vaikka joskus shell-scripti on ehkä hitaampi kuin erityinen ohjelma, sen tekemiseen menee niin paljon vähemmän aikaa, että se kannattaa.
Esimerkiksi C-kielellä ohjelmoidessa paljon aikaa menee tylsien asioiden tekemiseen (esim. muistitilan riittävyyden varmistamiseen jokaisen pienenkin operaation yhteydessä). Yleensä scripteissä (tai scriptikielissä, esim. Awk tai Perl) ei tarvitse tällaisista pikkuasioista murehtia, joten voi keskittyä olennaiseen.
Monet työkaluohjelmista mitä scripteissä käytetään ovat myös aika tehokkaita, näin niiden kehittämiseen mennyt työ saadaan omassa scriptissä käyttöön, ja vältytään itse uudelleen keksityiltä neliskulmaisilta pyöriltä.Perustyökalut shell-scripteissä
Shellin sisäänrakennetut toiminnot: :, ., break, continue, cd, eval, exec, exit, export, login, newgrp, read, readonly, set, shift, times, trap, umask, waitTestit
If-then-else, jos-sitten-muuten testi
if komento
then
komentoja
else
komentoja
fi
case-valinta
case "$foo" in
foo*) komentoja ;;
bar*) komentoja ;;
a|b) komentoja ;;
*) komentoja ;;
esac
Silmukat
for-silmukka, käy eri arvot läpi
for muuttuja in arvo1 arvo2 ...
do
komentoja
done
while-silmukka, tee niin kauan kuin
while komento
do
komentoja
done
Esimerkki Shell-scriptistä
#!/bin/sh
#
# Tee kuvista lista jossa on thumbnailit html-sivuna
# jolla on sitten linkit oikeisiin kuviin. Oletetaan
# että kuvat ovat tässä samassa hakemistossa.
#
# Hannu.Aronsson@iki.fi
#
echo "<HTML>
<HEAD><TITLE>Peukalonjäljet</TITLE></HEAD>
<BODY BGCOLOR=\"#FFFFFF\">
<H1>Peukalonjäljet</H1>
" # HTML aloitus
mkdir thumb 2>/dev/null # Tehdään thumb-hakemisto
for i # Joka argumentille
do
THUMBNAME="thumb/$i" # Nimi thumbnailille
case "$i" in # Kuvan tyyppi
*.gif) AVAUS="giftopnm" # GIF
;;
*.jpg|*.jpeg) # JPEG
AVAUS="djpeg"
;;
*) # Tuntematon
echo "Unknown image extension $i" >&2
exit 1
;;
esac
$AVAUS $i | # Tehdään PPM kuva
pnmscale -width 100 | # Skaalataan leveys
ppmquant 256 | # Vähennetään värejä
ppmtogif > $THUMBNAME # Tehdään GIFfi
echo "<P><A HREF=\"$i\">
<IMG SRC=\"$THUMBNAME\"> $THUMBNAME
</A>"
done
echo "</BODY></HTML>" # Lopuksi vielä htmlää
# EOF
Perl?
Jos työtä ei saa tehtyä hyvin yksinkertaisella shell-scriptillä, kannattaa nykyään heti jo harkita perl-työkalun käyttöä, jolla voi tehdä hyvinkin mutkikkaita "scriptintapaisia" ohjelmia.
Tosin Perl on erilainen, joiltakin osin aika kryptinen työkalu ja vaatii jonkinlaisia ohjelmointitaitoja tai suurta innostusta.C-ohjelma?
Unixin perusohjelmointiympäristö on tietenkin C-ohjelmointikieli. C-kieli on tehokas (jos ohjelmoija osaa ohjelmoida), suhteellisen alhaisen tason kieli, missä ohjelmoijalla on suuri vapaus, mutta myös suuri vastuu. C-ohjelmointi on yleensä hankalaa, siksi monet mutkikkaammatkin pulauttimet tehdään usein mielummin esim. Perl moottorisahatyökalulla.