Shell skript

Shell skript je skript napsaný pro shell, nebo příkazový řádek v operačním systému. Je často považován za programovací jazyky pro řešení konkrétního problému. Typické operace prováděné shell skriptem zahrnují manipulaci se soubory, provádění programování, a tisk textu.

Mnozí interpreti shell skriptu fungují jako příkazový řádek, jako například různé Unix shell, Windows PowerShell nebo MS-DOS COMMAND.COM. 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.

FunkceEditovat

ZkráceněEditovat

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í Unix 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í úlohEditovat

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íEditovat

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