Shellový skript

Shellový skript je v unixových operačních systémech textový soubor obsahující sérii příkazů, které jsou zpracovány shellem (resp. interpretem příkazového řádku). Když je dávkový soubor spuštěn, shell čte soubor a spouští jednotlivé příkazy, které jsou umístěny na samostatných řádcích. Shellové skripty jsou užitečné, když je potřeba spustit po sobě několik spustitelných souborů, čehož obvykle využívají administrátoři pro automatizaci zdlouhavých procesů.

Mnozí interpreti shell skriptu fungují jako příkazový řádek, jako například různé Unix shell či Windows cmd shell (CMD a CScript). Jiní, jako například AppleScript nebo grafické Windows Script Host (WScript.exe), přidávají schopnost skriptování do počítačového prostředí bez nutnosti příkazového řádku. Další příklady programovací jazyků primárně určených pro shell skriptování jsou DCL a JCL.

Použití

Přípona souboru se skriptem není v unixových systémech významná (na rozdíl od dávkových souborů v systémech DOS, Microsoft Windows a OS/2). Uživatel buď příponu úplně vynechá nebo pomocí ní může naznačit, jaký shell skript vykoná (.sh pro původní shell nebo bash, .csh pro C shell, .ksh pro Korn shell a podobně). Má-li být možné shellový skript vyvolat jeho jménem musí být na souboru nastaveno oprávnění pro spuštění (anglicky execute).

Funkce

Zkráceně

V úplně nejzákladnější formě, shell skript poskytuje vhodnou variantu systémového příkazu kde je speciální nastavení prostředí, možnosti příkazů, nebo pozdější zpracování aplikováno automaticky, ale způsobem, který umožňuje novému skriptu působit jako normální unixový příkaz.

Jako příklad může být vytvoření zkrácené verze příkazu ls, který slouží k výpisu adresářů a souborů, na příkaz l, který uložíme k uživateli do bin adresáře. Například /home/username/bin/l, odsud bude dodávána výchozí sada příkazů.

#!/bin/sh
LC_COLLATE=C ls -FCas "$@"

Zde první řádek (Shebang) označuje který interpret by měl být použit k provedení zbytku skriptu, a druhý řádek vytvoří seznam s možnými atributy formát souboru, sloupce, všechny soubory (žádný vynechaný), a velikost v blocích. LC_COLLATE=C nastavuje výchozí nastavení aby se nemíchala malá a velká písmena dohromady, a "$@" způsobí, že parametry zadané do l projdou jako parametry do ls tak, že všechny normální možnosti a celý syntax známý ls může být stále používán.

Uživatel by pak měl být schopen jednoduše používat l pro nejběžněji používaný krátký výpis.

Jako další ukázku Shell skriptování zde máme vytištění seznamu všech souborů nebo adresáře/ů v adresáři, kde se script nachází.

#!/bin/sh

clear
ls -l -a

V tomto případě by shell skript začal svým normálním počátečním řádkem #!/bin/sh. Následně skript provede příkaz clear, který vyčistí terminál od veškerého textu před přechodem na další řádek. Následující řádek zajišťuje hlavní funkci skriptu: ls -l -a příkaz vytvoří seznam souborů a adresářů, které jsou v adresáři, ve kterém skript běží. Atributy ls příkazu mohou být libovolně měněny, aby příkaz co nejvíce splnil potřeby uživatele.

Dávkování úloh

Shell skripty umožňují několika příkazům, které jsou ručně zadány do příkazového řádku, aby byly vykonány automaticky, bez nutnosti čekání na uživatele, který by spustil každou fázi posloupnosti. Například v adresáři se třemi zdrojovými soubory v C kódu, spíš než ručně rozbíhat čtyři příkazy potřebné pro sestavení finálního programu, stačí místo toho vytvořit C shell skript, zde pojmenovaný build a uložit ho do adresáře se soubory, kde je po spuštění automaticky spojí:

#!/bin/csh
echo compiling...
cc -c foo.c
cc -c bar.c
cc -c qux.c
cc -o myprog foo.o bar.o qux.o
echo done.

Tento skript uživateli umožní po editaci, zapauzování editoru a následném napsání ./build vytvoření updatovaného programu, jeho otestování a poté vrátí uživatele zpět do editoru. Od roku 1980 jsou takovéto skripty nahrazovány programy jako make, které se specializují na kompilaci programů.

Běžné používání

Jednoduché dávkované úlohy jsou obvyklé pro izolované úlohy, ale použití shell smyček, testů, a proměnných nabízí uživateli mnohem větší flexibilitu. Bash skript pro převod obrázků ve formátu JPEG na PNG formát, kde jsou jména obrázků k dispozici v příkazovém řádku – lze i pomocí zástupných znaků – namísto toho, aby byly uvedeny ve skriptu. Takto vytvořený skript nazveme například jpg2png.

#!/bin/bash
for jpg in "$@" ; do # proměnná $jpg načítá postupně parametry ze vstupu
 png="${jpg%.jpg}.png" # vytvoří PNG verzi souboru přepsáním .jpg na .png
 echo converting "$jpg" ... # vypíše informaci, že skript běží
 if convert "$jpg" jpg.to.png ; then # použije program pro převod obrázků (běžné v Linuxu) vytvoří soubor pouze dočasně
 mv jpg.to.png "$png" # při úspěchu, vytvoří z dočasného souboru soubor normální
 else # při chybě vypíše chybovou hlášku
 echo 'error: failed output saved in "jpg.to.png".' 1>&2
 exit 1
 fi # konec podmínky "if"
done # konec cyklu "for"
echo all conversions successful # vypíše hlášku uživateli
exit 0

jpg2png příkaz pak může být spuštěn na adresář plný JPEG obrázků tímto způsobem jpg2png *.jpg

Ostatní skriptovací jazyky

Související informace naleznete také v článku Skript (program).

Shellový skript má různé interprety, které uživatel volí zápisem na jeho prvním řádku. Obvykle je to nějaký shell, ale může to být prakticky jakýkoliv interpretovaný programovací jazyk s dostupným interpretem (např. PHP).

Související články