Gulamin komentotiedostoista

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

Takaisin

(C) Marko, Suomen Atari-sivut / ArkiSTo 2003