Tämä juttu on jatkoa aikaisemmin ilmestyneeseen komentotulkeista
kertovaan artikkeliin. Tarkoituksena on antaa lukijalle jonkinmoinen
käsitys siitä, mitä komentotiedostot ovat ja antaa vinkkejä siitä mitä
niillä voi tehdä. Tarkoituksena ei ole suomentaa Gulamin manuaalia.
Se löytynee elektronisessa muodossa klubin BBSistä, PD-kirjastosta,
ohjelmointiporukan kokouksesta tai lähimmältä ST-kaveriltasi.
Gulamissa voit käyttää komentotiedostoja, joiden avulla pitkien,
toistuvien käskyjonojen suoritus helpottuu. Komentotiedostojen
rakentaminen on tavallaan ohjelmointia käyttäjäliitännällä, käytettä-
vissäsi on lausekkeet, muuttujat, ohjausrakenteet sekä syöttö ja
tulostus. Komentotiedostot ovat tavallisia tekstitiedostoja, joissa
on .g-tunniste. Ne voit tehdä esim. 1ST_WORDin ei-WP -moodissa tai
Gulamin MicroEMACSilla (ue-komento). Komentotiedoston suoritus
käynnistyy sen omalla nimellä, .g-tunnistetta ei tarvita. Usein
tiedostot ovat omassa hakemistossaan, josta tulkki löytää ne set path
-komennolla asetetun polun avulla, esim. set path c:\bat,c:\utility.
Yleistä ohjauskielestä
----------------------
Isot ja pienet kirjaimet ovat merkitseviä kaikkialla muualla paitsi
tiedostojen nimissä, siis esim. ls, Ls, lS ja LS eivät tarkoita samaa.
Komento jaetaan suoritettaessa sanoihin ja osasanoihin. Sanaerottimet
ovat:
välilyönti, tab-merkki, return ja rivinvaihto ( C-kielen whitespaceja)
yksinkertainen ja kaksinkertainen lainausmerkki (' ja ")
puolipiste ja pystyviiva (; ja |)
Huom! Merkit +-*=/()[]{} jne. EIVÄT ole erottimia. Käytä välilyöntejä.
Osasanaerottimia ovat:
!@#$%^&-=+`~{}:;'"\|,.<>/
Kommentit alkavat #:lla ja jatkuvat rivin loppuun
Komennot voi erottaa toisistaan puolipisteellä.
Komennon ei tarvitse olla saman niminen kuin itse tiedoston, jos käytät
alias-komentoa.
Komentotiedossa ei pidä käyttää ue- eikä more-komentoja, koska suorituk-
seen käytetään ue-puskureita.
Syötön ja tulostuksen uudelleenohjaus ei toimi kunnolla komentotiedos-
toissa.
Aina kun käynnistät Gulamin, suoritetaan komentotiedosto GULAM.G.
Sinne kannattaa laittaa kaikki pysyväismäärittelyt. Esimerkki:
set dir_cache 1 # nopeutetaan komentohakua, ks. man.
set verbosity 2 # Gulamin "puheliaisuuden" asetus
set prompt '$cwd' # kehottimen asetus työhakemistoksi
set prompt_tail '\' # kehottimen loppumerkin asetus
set baud_rate 2400 # tiedonsiirtonopeuden asetus
set sz_rs232_buffer 4096 # rs232-puskurin koon määrittely
set gulam_help_file c:\Gulam.hlp # määritellään help-tiedoston paikka
set histfile c:\utility\history.g # tänne tallennetaan history-tiedot
set history 24 # history = 24 viimeistä komentoa
set path c:\utility,c:\bat # asetetaan komentojen hakupolku
alias ++ pushd # OMIEN KOMENTOJEN MÄÄRITTELYÄ:
alias -- popd # loogisia hakemistopinokomentoja
alias h history # laiska mies!
alias list more # kummajainen MS-DOS-maailmasta
alias p more # laiska mies!
alias type more # lisää kummajaisia MS-DOS-maailmasta
alias rm rm -i # tuhottavat kysytään yksitellen
alias ll ls -lF # ll = aakkostettu ls-komento
alias ls ls -F # enemmän infoa ls-komentoon
alias del rm -i # lisää kummajaisia MS-DOS-maailmasta
alias dir ls # -""-
alias md makedir # -""-
alias rd rmdir # -""-
alias cal calendar -w leffat.cal # viikon tv-elokuvat komennolla cal
alias acal catt ">>leffat.cal" # lisäys kalenteriin komennolla acal
if { -d m:\tmp } == 0 # onko ramlevyllä m: tmp-hakemisto?
mkdir m:\tmp # ellei, niin tehdään!
endif
cal # katsotaan viikon tv-elokuvat
Huom! cal ja catt eivät ole Gulamin sisäisiä komentoja, vaan ne ovat
pari UNIX -apuohjelmaa, PD:tä.
Lausekkeet
----------
Gulamissa on useita lauseketyyppejä: tiedostopredikaatteja, aritmeettisia
sekä relationaalisia lausekkeita.
Tiedostopredikaatti on tyyppiä:
-c tiedostonimi, missä c on joku seuraavista:
e = on olemassa, exists
f = on tavallinen tiedosto, file
d = on hakemisto, directory
h = on piilotettu tiedosto, hidden file
v = on levyn nimiö, volume label
m = on archived-tiedosto
ja se palauttaa arvon 1 (tosi) tai 0 (epätosi).
Aritmeettiset lausekkeet suoritetaan vasemmalta oikealle, operaattorit
ovat +-/%. AALTOSULUILLA voi vaihtaa suoritusjärjestystä:
set arvo 2 + 6 / 2 + 4 # arvo = 8
set arvo 2 + { 6 / 2 } + 4 # arvo = 9
Relaationaalinen lauseke on muotoa:
aritmexp relepx aritmexp , missä
aritmexp = aritmeettinen lauseke
relexp = <=, <, ==, >, tai >=
ja se palauttaa arvon 1 (tosi) tai 0 (epätosi). Lausekkeita voi yhdistää
&&- sekä ||-operaattoreilla (ja & tai). Merkkijonojen vertailua ei Gulam
toistaiseksi osaa.
Muuttujat
---------
Gulamissa on kahta päälajia olevia muuttujia: komentotulkin sisäisiä
muuttujia (shell variables) sekä ympäristömuuttujia (environment
variables) Näiden arvoja voit asettaa set- ja setenv-komennoilla.
Anna ko. komento ilman parametreja niin Gulam tulostaa kaikkien sen
lajin muuttujien arvot. Sisäisiä muuttujia käytetään komentotulkin
toiminnan ohjaamiseen, ympäristömuuttujia käytetään tiedon välittämiseen
komentotulkista ajettaville ohjelmille. Tämä tietysti edellyttää että
ohjelmat on tehty ottamaan vastaan tietoa tällä tavoin. Tyypillinen
esimerkki on kääntäjä, jolle ilmoitetaan sen tarvitsemien kirjasto-
ym. tiedostojen sijainti ympäristömuuttujien avulla.
Gulamissa on määritelty etukäteen joukko muuttujia, mutta omia on varsin
helppo tehdä:
set myvar 1 # asettaa muuttujalle "myvar" arvoksi 1
set myvar $myvar + 1 # kasvattaa muuttujan "myvar" arvoa yhdellä
set player "Great Zot" # asettaa muuttujan "player" arvoksi "Great Zot"
set paiva maanantai # asettaa muuttujan paiva arvoksi "maanantai"
$-merkki sijoituskäskyn oikealla puolella erottaa muuttujan "myvar"
merkkijonosta myvar. Muuttujaa voi käyttää kokonaislukuarvojen tai
merkkijonojen säilyttämiseen. $n-muuttujilla (n = numero) on erityinen
merkitys:
$0 se merkkijono (= komentorivi), jolla komentotiedosto käynnistettiin
$1 ensimmäinen komennon nimen jälkeen annettu parametri
$2 toinen -"-
$3 kolmas -"-
. . .
. . .
. . .
$n n:s -"-
$- parametrit $1-$n
foreach tiedosto { $2 $3 $4 $5 $6 $7 } # tulostetaan max. 6 tiedostoa
print $tiedosto
endfor
arc -a $1 $2 $3 $4 $5 $6 $7 # ja arcataan ne yhdeksi ($1)
foreach tiedosto { $2 $3 $4 $5 $6 $7 } # ja tuhotaan lopuksi
rm $tiedosto
endfor
$< lukee arvonsa näppäimistöltä. Tämän komennon edellä kannattaa
asettaa muuttujan "ginprompt" arvo sopivaksi kysymykseksi:
set ginprompt 'anna osoitetiedosto ' # kehoitinasetus
set osoitefile $< # itse kysymys
tarrat -w $osoitefile # ajetaan tarraohjelma
set ginprompt 'tulostetaanko nyt heti? (k/e)'# uusi kehoitinasetus
set ok $< # taas kysytään
if { $ok == k } # vastattiinko k?
lpr tarrafil # jep, tarratulostus
endif
Kontrollirakenteet
------------------
foreach-komennossa rakenteen sisätämät komennot toistetaan siten että
silmukkamuuttuja saa jokaisen aaltosuluissa annetun arvonsa. Esim:
foreach paiva { ma ti ke to pe la su } # poistetaan kaikki väli-
rm $paiva\*.scr # aikaistiedostot (.src)
endfor # "päivähakemistoista"
if-komento else-haaroineen lienee tuttu ohjelmointikielistä. Esim:
if { -e osoite.dat } # tehdään varmuuskopio
mv osoite.dat osoite.bak # "osoite.dat"ista, jos
ef # sellainen tiedosto
echo OSOITE.DAT puuttuu # löytyy, muutoin
endif # ilmoitetaan asiasta
while-rakenne löytyy mm. ST-BASICistä.
while { $copies < 10 } # tulostetaan 10 kirjettä
print $kirje # kirjoittimelle, "copies"-
set copies $copies + 1 # muuttujalla täytyy olla
endwhile # alkuarvo
Lopuksi
-------
Täytyy vain todeta että taas tuli vain raaputettua pintaa, siksi
monipuolinen komentotulkki Gulam on. Kuitenkaan ei kannata antaa
laajuuden masentaa, sillä varsin pienenkin opiskelun jälkeen voi jo
hyödyntää tietojaan. Gulamin on tehnyt USA:ssa kaveri nimeltä
Prabhaker Mateti tukenaan Jwahar R. Bammi. Siitä johtuu tulkin nimi,
joka on Hindi/Urdua ja tarkoittaa kuuliaista palvelijaa. Olkoon
Gulam sinunkin kuuliainen palvelijasi!
Esa Matti
|