Skriptové súbory

Ing. Peter Macsánszky

Skriptové súbory sú pre väčšinu amigáckej populácie záhadou číslo jedna. Dôvodov je viac: absencia odborných publikácií a neznalosť príkazov Amiga Dosu. Právo z uvedených dôvodov sa zrodila myšlienka publikovať článok na túto zabudnutú oblasť.

Začiatočníkov upozorňujeme, že nemusia ďalej listovať, nakoľko sa budeme snažiť jednoduchou formou podať základné poznatky práve pre nich. Záverečnú časť venujeme potom mierne pokročilejším.

Prvá zastávka
Pojem skriptový súbor sa v odbornej terminológii niekedy nahrádza výrazom dávkový súbor, čo je bližšie k pôvodnému anglickému názvu "batch file". Pre nás je dôležité si zapamätať všetky tri pojmy, nakoľko sa v praxi voľno zamieňajú (pritom znamenajú to isté). Zatiaľ ale nevieme, o čo sa jedná. Veľmi jednoducho povedané, skriptový súbor je obyčajný textový súbor, (teda obsahuje text), ktorého riadky predstavujú príkazy operačného systému. Radím, aby sto si hneď na tomto mieste vyskúšali a napísali nasledovný skriptový súbor spolu s nami.

Úloha číslo jedna
Ako je známe, príkaz "list" vypíše obsah aktuálneho podadresára (názvy súborov, podadresárov, ich dĺžku, dátum a čas vzniku, atribúty atď.). Náš školský príklad bude obsahovať iba tento príkaz. Teraz by sto si mali zaobstarať jednoduchý textový editor. Odporúčame "Cygnus Editor", ale môžete použiť aj program "Ed", ktorý je súčasťou Workbenchu. V textovom editore napíšte iba jeden jediný riadok: "List" (bez úvodzoviek). Tento krátky súbor uložte na disketu, alebo do ramdisku pod ľubovoľným menom, napr. "Pokus1". Týmto je náš prvý skriptový súbor hotový.

Úloha číslo dve
Ďalšia úloha je spustiť náš skriptový súbor. Najjednoduchšie to zvládneme z prostredia Shellu. Do príkazového riadku napíšte:

Execute ram:Pokus1

Príkaz "Execute" zabezpečí vykonanie skriptového súboru. Jeho parametrom je názov skriptového súboru a jeho prístupová cesta. V ďalšom okamihu sa vykoná príkaz uvedený v našom skriptovom súbore: príkaz "List". Obrazovku v priebehu niekoľkých sekúnd zaplní výpis aktuálneho podadresára.
Vykonanie skriptového súboru môžeme zabezpečiť aj iným spôsobom. Najprv musíme nastaviť jeho atribút (tzv. protect bit) "S" pomocou príkazu "Protect" takto:

Protect ram:Pokus1 S

Po tejto finte už nemusíme uvádzať príkaz "Execute", ale stačí do Shellu napísať iba názov skriptového súboru, ktorý sa potom automaticky vykoná.

Opakovanie
Ak si naše vedomosti zhrnieme, potom môžeme dospieť k nasledovným záverom: - skriptový súbor je súbor, ktorý obsahuje príkazy AmigaOS najlepšie sa píše v Cygnus Editore - ak chceme spustiť skriptový súbor, musíme použiť príkaz Execute - ak nastavíme atribút "S" pre náš skriptový súbor, potom stačí do príkazového riadku Shellu napísať iba názov skriptového súboru (bez Execute).

Ďalšie vedomosti
Ako praktický príklad skriptových súborov môžeme na prvom mieste spomenúť tzv. "Startup-sequence". Je to skriptový súbor, ktorý sa nachádza v podadresári s názvom "S". Tento súbor sa automaticky vykoná pri načítaní systému z diskety alebo harddisku. Má výnimočné postavenie z viacerých dôvodov: po prvé vykonáva sa automaticky, t.j. nespúšťame ho my; po druhé - obsahuje príkazy, ktoré zabezpečujú správny chod systému.
Podobným príkladom je "User-startup", ktorý volá startup-sequence a môžeme ho považovať za jeho voľné pokračovanie.
Na diskete Workbenchu môžete nájsť aj ďalšie skriptové súbory, ktoré ale musí spúšťať užívateľ. Nachádzajú sa takisto v podadresári "S" a volajú sa: "PCD" a "SPat". Skúste ich vyhľadať a prezrieť (napr. pomocou textového editora). Zároveň vás upozorňujeme, že ak na prvý pohľad nepochopíte význam jednotlivých riadkov, tak ide o úplne normálnu záležitosť (99% amigistov je na tom úplne zhodne s vami. A týmto sa opäť potvrdilo Murphyho zlaté pravidlo: "Počítač je ideálny nástroj na riešenie takých problémov, ktoré by bez počítača neexistovali.") Týmto príkladom sme nechceli nikoho odstrašiť, iba ukázať, že skriptové súbory môžu byť aj takéto zložité (a nepochopiteľné).

Zložitejší príklad
V ďalšom kroku si spravíme nový skriptový súbor. Predstava je nasledovná: často pracujete so Shellom a máte iba disketovú mechaniku. Načítanie jednotlivých príkazov z diskety trvá rádovo iba niekoľko sekúnd, ale vás to zdržuje. Túžite po vymoženosti, akú majú užívatelia harddiskov: po zadaní príkazu, nech sa ten okamžite vykoná. Riešenie je nasledovné: treba prekopírovať všetky príkazy z diskety (z podadresára "C" ) do ramdisku. Odtiaľto sa budú vykonávať bleskovou rýchlosťou (dokonca rýchlejšie ako z harddisku). Našou úlohou je teraz napísať skriptový súbor, Ktorý túto jednoduchú záležitosť vykoná. Príkazy budeme kopírovať do ramdisku, do podadresára "C", ktorý tam vytvoríme. Preto prvý riadok nášho skriptového súboru musí začínať príkazom "Makedir", ktorý vytvorí želaný podadresár:

Makedir ram:c

Ďalším krokom je prekopírovať súbory z diskety do ramdisku:

Copy sys:c ram:c

Potom ešte musíme prezradiť systému, aby príkazy už nehľadal na diskete, ale v ramdisku. Na tomto mieste treba vedieť, že operačný systém hľadá príkazy v podadresároch, ktoré sú uvedené ako parametre príkazu "Path". Preto najprv nastavíme novú prístupovú cestu do podadresára "c" v ramdisku a potom starú cestu zrušíme:

Path ram:c add
Path sys:c remove

Náš kompletný skriptový súbor vyzerá nasledovne:

Makedir ram:c
Copy sys:c ram:c
Path ram:c add
Path sys:c remove

Nezabudnite ho uložiť! Pre skriptové súbory bol pôvodne vytvorený podadresár "S"` na systémovej diskete, preto navrhujeme, aby sto svoj druhý výtvor uložili sem. Teraz už len stačí spustiť tento súbor a ak všetko je v poriadku, naše predstavy sa stanú skutočnosťou: v ramdisku sa vytvorí podadresár C, ktorý obsahuje všetky príkazy. Ak ste sa dopustili nejakej chyby napr. použili ste neexistujúci príkaz, alebo nesprávny argument, dostanete chybové hlásenie (Failed).

Komplikácie
Ak ste sa dopracovali po tento riadok, potom musíme upozornil začiatočníkov, že prípadné komplikácie a nezrovnalosti môžu prameniť z vašej strany z neznalosti príkazov operačného systému. Ak vaše nadšenie ešte stále pretrváva, radíme, aby ste začali študovať príručku počítača a venovali sa kapitole príkazov operačného systému. Ak ich zvládnete, budete schopný pomocou skriptových súborov napísať hotové "počítačové ódy".

Pokračovanie pre pokročilejších
Na ďalších riadkoch si rozšírime naše vedomosti o skriptových súborov. Najprv sa pokúsime zdokonaliť náš predchádzajúci príklad.
Ak sa znova pokúsite spustiť náš skriptový súbor, dostanete chybové hlásenie, nakoľko príkaz "Makedir" nedokáže vytvoriť podadresár C v ramdisku, pretože ten už existuje. Vykonávanie skriptového súboru sa preto hneď v tomto riadku zastaví. Preto navrhujeme, aby sme pomocou skriptového súboru overili, či už je daný podadresár vytvorený. Ak áno, potom nech náš skriptový súbor vypíše oznam "Podadresár C je už vytvorený!". V opačnom prípade pokračuje podľa pôvodných plánov: vytvorí podadresár C, prekopíruje súbory, nastaví prístupovú cestu. Aby sme toto všetko vedeli napísať, musíme sa zoznámiť s príkazom "If".
Tento príkaz slúži na vetvenie skriptového súboru podľa podmienky, ktorá je parametrom príkazu. Príkaz If sa používa v dvoch variantoch:

If podmienka
príkaz
...........
...........
Endif.

Druhá varianta je nasledovná:

If podmienka
príkaz
...........
...........
Else
príkaz
...........
...........
Endif

Najprv si rozoberme prvý prípad. Ak je podmienka uvedená za príkazom If splnená, potom sa vykonajú všetky príkazy uvedené za ním až po príkaz "Endif". Ak sú ďalšie príkazy za Endif, aj tieto sa vykonajú. V opačnom prípade, teda ak podmienka nie je splnená, spracovanie príkazov pokračuje za riadkom Endif to znamená, že príkazy medzi If a Endif sa vynechajú, nespracujú.
Druhá forma príkazu If je taktiež veľmi jednoduchá. V prípade splnenej podmienky sa vykonajú príkazy po "Else" a potom spracovanie pokračuje za riadkom "Endif". Ak podmienka nie je splnená, potom sa vykonajú príkazy za "Else". Ten, kto má mierne programátorské skúsenosti, tomu je funkcia príkazu "If" určite známa, nakoľko podobné konštrukcie využívajú všetky vyššie programovacie jazyky.
Teraz sa pozrime na možné podmienky. Môžu to byt kľúčové slová: "Exists", "EQ", "GT", "GE", "Warm", "Error", "Fail".
Exists - otestuje, či súbor, adresár, alebo zariadenie uvedené za ním existuje.
EQ, GT a GE sa používajú na porovnávanie dvoch hodnôt (alebo premenných). EQ otestuje, či obidva parametre sú zhodné; GT dáva pravdivý výsledok, ak prvý parameter je väčší ako druhý: GE je kombinácia prvých dvoch, leda "väčší alebo rovný".
Warm - dáva pravdivý výsledok, ak chybový kód predchádzajúceho príkazu má hodnotu najmenej 5.
Error - podobný podmienke "Warm", ale chybový kód musí mat hodnotu najmenej 10.
Fail - podobný podmienke "Warm", ale chybový kód musí mat hodnotu najmenej 20.
O chybových kódoch sa zmienime najbližšie.
Po tejto krátkej teoretickej príprave môžeme pristúpiť k napísaniu nášho programu:

If Exists ram:c
Echo "V ramdisku už je vytvorený podadresár C!"
Else
Makedir ram:c
Echo "Kopírujem..."
Copy sys:c ram: C quiet
Path ram:c add
Path sys:c remove
Echo "Príkazy sa nachádzajú v ram:c"
Endif

V prvom riadku sa najprv otestuje, či už existuje podadresár "C" v ramdisku. Ak áno, teda podmienka je splnená, potom sa na obrazovku vypíše správa "V ramdisku už je vytvorený podadresár C!" a spracovanie skriptového súboru pokračuje za riadkom Endif, teda v našom prípade sa ukončí. Ak ešte podadresár "C" nie je vytvorený, potom sa vykonajú príkazy za "Else". V tejto časti sme spravili iba dva malé zásahy. Pridali sme príkaz "Echo", ktorý nás informuje o tom, čo sa práve deje. Ďalšia zmena sa týka príkazu "Copy", kde sme na konci použili parameter "Quiet", ktorý zabráni vypisovanie názvu práve kopírovaného súboru.

Premenné, cykly, direktívy...
Pomocou príkazových súborov sa dajú zhotoviť majstrovské "diela". AmigaOS ponúka širokú paletu príkazov špeciálne určených pre skriptové súbory. Ako príklad si spomeňme vetvenie (príkaz "If"), ďalej dokážeme narábať s premennými, môžeme volať podprogramy, skoky na definované návestia... Už len tieto vymenované prostriedky bohate postačia na vytvorenie takých skriptových súborov, ktoré majú charakter programov (teda dokážu sa rozhodovať či vetviť na základe podmienok).
Väčšina programov sa volá s parametrami a skriptové súbory tiež nie sú výnimkou. Na odovzdávanie parametrov zo Shellu používame o bodkové príkazy - tzv. direktívy. Nejedná sa o skutočné príkazy, dokáže ich interpretovať iba príkaz "Execute". Ich pomenovanie pochádza z toho, že sa začínajú bodkou. Teraz sa pozrime, ktoré sú to.
.Key alebo .K - Slová uvedené za týmto príkazom sa chovajú ako premenné a dostávajú hodnoty, ktoré sa uvedú ako parameter pri volaní skriptového súboru. Ak je počet parametrov menší ako počet premenných, potom tieto nebudú inicializované, to znamená, že sa tieto premenné ani nevytvoria. Ak je potrebné, aby niektorá premenná mala bezpodmienečne nejakú hodnotu, potom za ňou treba uviesť "/A". Napríklad: .Key hodiny/A - ak sa tejto premennej neujde parameter, potom sa vypíše chybové hlásenie "required argument missing" (nedostatočný počet parametrov) a zastaví sa vykonávanie skriptového súboru.
.Def - Priradí hodnotu danej premennej. Premenná, ktorá v direktíve .Key dostala hodnotu cez parameter, nemôže dostať novú hodnotu. Iba takým premenným môžeme priradiť hodnoty, ktoré sú definované v .Key a nedostali hodnotu.
Na premenné sa môžeme odvolávať pomocou ich názvov uvedenými medzi špicatými zátvorkami <>. Ďalší krátky príklad demonštruje uvedené poznatky.

.Key meno/A, priezvisko, vek
.Def vek XX
Echo "Voláš sa <meno> <priezvisko> a máš <vek> rokov"

Ako vidieť, program vyžaduje tri parametre, z ktorých prvý musíme bezpodmienečne uviesť (o to sa postaral zápis "/A" ). V druhom riadku sa premennej "vek" priradí hodnota "XX", ale iba v tom prípade, ak sa neuvedie hodnota v parametroch. Po spustení programu s nasledovnými parametrami:

execute sys:s/pokus3 Commodore Amiga

dostaneme výsledok:

Voláš sa Commodore Amiga a máš XX rokov

Posledná zastávka
Ďalší príklad je o niečo zložitejší, pretože už narába s premennými a príkazom skoku. Úlohou programu je znižovať obsah premennej "pocet" o jednu a po každom znížení vypísať jej hodnotu. Program sa ukončí, ak premenná dosiahne hodnotu nula.

.Key kolko/A
Setenv pocet <kolko>
If 0 GE $pocet
Echo "Zadaj väčšiu hodnotu ako 0!"
Quit 20
Endif
Lab .start
Echo "Stav počítadla = $pocet"
Eval $pocet - 1 to env:pocet
If $pocet GT 0
Skip start back
Endif
Echo "Koniec..."

Program vyžaduje parameter "kolko", ktorý predstavuje počiatočnú hodnotu čítača. V druhom riadku sa hodnota premennej uloží do globálnej premennej "pocet".
Globálne premenné sú textové súbory, ktoré sa štandardne ukladajú do logického podadresára "ENV:". V tomto prípade sa v "ENV:" vytvorí súbor s názvom "pocet" a bude obsahovať v textovej podobe hodnotu parametra "kolko". K hodnote globálnej premennej sa môžeme dostať pomocou znaku "$". Globálne premenné sme zapojili do "hry" z toho dôvodu, lebo sa s nimi pracuje ľahšie ako s obyčajnými premennými.
Na ďalších riadkoch sa otestuje, či vstupný parameter nemal hodnotu nula. Ak áno, potom príkaz Quit ukončí program. Príkaz "Lab" definuje návestie, na ktoré sa môžeme v priebehu programu odvolávať. Nasledovný riadok vypíše stav počítadla - hodnotu premennej "pocet". V ďalšom riadku príkaz "Eval" odčíta od premennej "pocet" číslo jedna a výsledok zapíše do textového súboru "pocet".
"Eval" štandardne vypisuje výsledok na obrazovku, ale použitím kľúčového slova "to" je možné výsledok presmerovať do súboru. Treba vedieť, že použitím znaku "$" sa môžeme odvolávať iba na hodnotu globálnej premennej, ale nemôžeme do nej zapisovať. Preto sme výsledok príkazu "Eval" presmerovali do textového súboru "pocet" v podadresári "ENV:", ktorý je vlastnej globálnou premennou.
Ku koncu programu sa porovná hodnota premennej s hodnotou nula. Ak je hodnota premennej väčšia, potom príkaz "Skip" zabezpečí, že spracovanie sa pokračuje za návestím "Start". Tento cyklus sa opakuje, až kým premenná "pocet" nedosiahne hodnotu nula.
Ak vidíte, aj v prostredí operačného systému je možné vytvárať viac-menej jednoduché programy.
Nasadenie a význam skriptových súborov je veľmi rozsiahly. Uplatňujú sa hlavne pri riešení často sa opakujúcich úloh, ako inštalačné skripty a aj ako jednoduchý programátorský nástroj operačného systému. V našom článku sme ani zďaleka nevyčerpali všetky zákutia danej problematiky. Neboli spomenuté príkazy pre zmenu direktív, príkazy na spracovanie chýb, volanie podprogramov, volanie requesterov a pod. Tejto téme by sme sa venovali najbližšie.



Pozn.: články boli naskenované ako text a preto obsahujú aj zopár chýb. Taktiež neručíme za zdrojové kódy (Asm, C, Arexx, AmigaGuide, Html) a odkazy na web. Dúfame, že napriek tomu vám táto databáza dobre poslúži.

Žiadna časť nesmie byť reprodukovaná alebo inak šírená bez písomného povolenia vydavatela © ATLANTIDA Publishing