Programování v Shellu (úvodní díl)

V této sérii článků bych vám ukázat, jak psát a spouštět svoje skripty v shellu.

Co je to vlastně Shell?

Shell je příkazový interpreter, který najdeme na všech Linuxových distribucích. Můžeme do něj zadávat příkazy, které má náš systém provést. V podstatě tvoří rozhraní mezi uživatelem a operačním systémem. Na každém systému Linux můžeme mít naistalovaných i více shellů (příkazových interpretrů), ze kterých si můžeme vybrat, který chceme zrovna použít. Defaultním shellem v Linuxu je bash (GNU Bourne-again Shell) který je uložen v adresáři bin (/bin/bash). Odkazem na tento shell je /bin/sh. V těchto článcích budu používat bash, protože je nejpoužívanější a nejrozšířenější. O dalších se pouze zmíním. Existují například shelly: csh, ksh, zsh, pdksh, apod. Aktuální verze bashe je 4.1.5.

Verzi vašeho bashe zjístíte následujícím příkazem:

$ /bin/bash --version

Jak změnit aktuální shell?

Váš aktuální shell vypíšete následujícím příkazem:

$ echo $SHELL
/bin/bash

Změny aktuálního shellu docílíme tak, že změníme systémovou proměnnou SHELL a nastavíme jí na námi požadovaný shell. Pokud tedy se rozhodneme použít například csh, bude náš příkaz vypadat takto:

$ export SHELL=/bin/csh
export SHELL

Nyní se můžeme podívat, jaký je aktuální shell:

$ echo $SHELL
/bin/csh

Pokud ho chcete změnit pouze dočasně, stačí ho jednoduše spustit, jako ostatní programy:

$ /bin/csh

Proč v něm programovat?

Shell je velice mocný nástroj. Umožňuje nám např. opakováné provádění série příkazů, abychom je nemuseli zadávat pokaždé znovu (v podstatě je to analogie k windows dávkovým souborům *.bat). Můžeme vytvořit skript, který se vykoná při určité akci (např. přihlášení do systému), nebo v učitém čase. Můžete si myslet, že shell je to samé jako příkazový řádek ve Windows, ale my si v tomto seriálu ukážeme, že tomu tak není a že shell je oproti příkazové řádce opravdu velmi mocný nástroj.

Jak psát shellové skripty?

Pro psaní shellových skriptů máme dvě možnosti. První je psaní skriptů jako sérii příkazů (interaktivně) nebo je můžeme zapsat do souboru (skriptu) a poté spustit.

Interaktivní spouštění skriptů

Příkazy skriptu můžeme zadávat postupně přímo do příkazového řádku. Této metodě se říká interaktivní. Pojďme si ukázat, jak tato metoda funguje:

Chceme například vypsat postupně čísla od 1 do 5 pomocí shellového skriptu. Do příkazového řádku zadejte následující:

$ for cislo in 1 2 3 4 5
> do
> echo "Aktualni cislo je: $cislo"
> done

Určitě jste si všimli, že když shell očekával další vstup změnil klasický $ (command prompt) na > a hned jak usoudil, že je skript hotový, okamžitě jej spustil. Výstupem našeho skriptu tedy je:

Aktualni cislo je: 1
Aktualni cislo je: 2
Aktualni cislo je: 3
Aktualni cislo je: 4
Aktualni cislo je: 5

Spuštění skriptu v souboru

Teď si ukážeme, jak vytvořit a spustit shellový skript ze souboru. V textovém editoru si vytvořte nový soubor (např. mujskript.sh). Přípona .sh není nezbytná, ale je lepší, když ji použijete, protože z názvu souboru poznáte, že se jedná o shellový skript.  Na první řádek souboru napište

#!/bin/sh

popřípadě

#!/bin/bash

protože jsme si již dříve řekli, že většinou je /bin/sh odkazem na /bin/bash. Co ale tento řádek znamená? Tento řádek udává program, ve kterém se má skript provádět, v našem případě tedy /bin/sh. Dále vložte do souboru náš skript a na konec souboru vložte řádek

exit 0

který programu ve kterém je spuštěn říká, že skončil úspěšně (jako např. v jazyku C). Nyní soubor uložte. Náš soubor mujskript.sh vypadá následovně:

#!/bin/sh

for cislo in 1 2 3 4 5
do
echo "Aktualni cislo je: $cislo"
done

exit 0

A nyní se skript pokusíme spustit. Do příkazového řádku zadejte:

$ ./mujskript.sh

Ale co to? Vyskočí na nás hláška bashe, že nemáme oprávnění tento soubor spustit.

bash: ./mujskript.sh: Permission denied

Toto vyřešíme tak, že si ty práva na spuštění prostě udělíme a to následujícím příkazem

$ chmod +x mujskript.sh

Tento příkaz nám přidá právo na spuštění souboru (x od eXecute). Nyní můžeme náš skript spustit. Existuje i jiná možnost, jak spustit náš skript a to i bez udělování práv ke spuštění. První možnost se mi zdá lepší, ale máte na výběr.

Skript můžete spustit tak, že zadáte program ve kterém ho chcete spustit a soubor se skriptem mu předáte jako parametr. Takže následovně:

$ /bin/bash mujskript.sh

Co bude dále?

V dalším článku se budu věnovat syntaxi shellu. Pokud máte dotazy či připomínky budu velice rád, když mi je napíšete do komentářů ke článku.

O Petr Jirouš

Věnuji se programování aplikací v C/C++, programování databázových aplikací, apod. Mými koníčky jsou Linux a kapela :)