Skriptovací jazyky stejně jako kompilované programovací jazyky začínají psaním zdrojového kódu, ale již nejsou kompilovány a spuštěny. Místo toho interpreter jazyka čte instrukce ze zdrojového kódu a podle obsahu tyto instrukce vykonává. V případě bash spouští programy, které jste napsali do zdrojového kódu. Bohužel, protože interpreter čte každé instrukce jednotlivě a jejich zpracování není rychlé (program je částečně překládán za běhu), jsou tedy skriptovací jazyky výrazně pomalejší než kompilované programy. Hlavní výhoda skriptovacích jazyků spočívá v jejich přenositelnosti na jiné platformy či operační systémy, jejich jednoduchosti a také velikosti. Skriptovacím jazykem je právě například bash. Příklady dalších interpretovaných (skriptovacích) jazyků jsou JavaScript, Perl, Lisp, Prolog a další.
Proměnné v systému lze rozdělit do tří skupin.
Proměnné jsou definovány svými jmény. Hodnotu proměnné přiřadíme znaménkem "rovná se ".
jmeno="Lenka"
Proměnnou zrušíme příkazem unset.
unset jmeno_promenne
Hodnotu proměnné zobrazíme pomocí echo.
echo "Zadali jste: $jmeno"
Změna hodnoty:
Dvě proměnné: jmeno="Bart" a prijmeni="Simpson" můžeme spojit: cele="$jmeno $prijmeni".
Hello world. První řádka programu říká Linuxu, co se má použít za interpret.
#!/bin/bash echo "Hello, world!"
Předpokládejme, že se náš skript jmenuje hello.sh (přípona sh není podmínkou, většina skriptů žádnou příponu nemá). Podíváme se jaká má nastavena práva. Zjistíme, že chybí právo pro spuštění. Musíme tedy nastavit právo pro spuštění. Zápis chmod může vypadat takto:
chmod 700 ./hello.sh, nebo chmod +x ./hello.sh
Následně skript můžeme spustit takto:
./hello.sh Hello, world!
Do programu je také možné přidat komentář. Děje se tak pomocí znaku #. Začíná-li řádka právě tímto znakem, bere se tato řádka jako poznámka. Tedy tato řádka se nevykonává. Jedinou výjimku tvoří právě první řádka skriptu, ve které je uveden interpreter, který provede skript.
Script, který přesune všechny soubory do adresáře, a pak tento adresář smaže i s tím, co obsahuje. Poté se tento adresář znovu vytvoří:
#!/bin/bash mkdir trash mv * trash rm -rf trash mkdir trash echo "Vsechny soubory jsou smazany!"
BASH také podobně jako většina programovacích jazyků dovede provádět matematické výrazy.
Výsledek dostaneme pomocí konstrukce: expr 3 + 3 (pozor na prázdné znaky)
Možné matematické operace:
#!/bin/bash x=8 y=4 z=$[$x + $y] echo "Soucet $x a $y je $z"
Bash dovede pracovat pouze s čísly celými. Nelze tedy používat desetinná čísla.
V bashi můžete vytvořit script, který bude interaktivní, tedy reagovat na vstup uživatele (popř. na vstup čtený ze souboru). Příkaz uživatelského vstupu je příkaz read. Příkaz vyžaduje jako parametr proměnnou.
#!/bin/bash echo -n "Zadej sve jmeno: " read jmeno echo "Zdravim te $jmeno!"
Syntax:
if seznam; then seznam; [ elif seznam; then seznam; ] ... [ else seznam; ] fi
Provede se ’if seznam;’. Pokud jeho návratový kód je nulový (OK), provede se ’then seznam;’. Jinak se provede ’elif seznam;’ (...) nebo ’else seznam;’. Návratový kód je kód posledního provedeného procesu nebo 0, pokud se neprovedl žádný příkaz.
if test -f /etc/foo then #Soubor existuje. Zkopíruj tedy soubor cp /etc/foo . echo "Hotovo!" else # Soubor neexistuje. Vypis tedy chybu echo "Soubor neexistuje!" exit fi
Struktura case je velmi podobná struktuře if. V základu struktura case je určena pro vykonání jednoho z několika kusů kódu a to podle toho, jakou hodnotu má proměnná uvedená za příkazem case. Zde je příklad struktury case:
#!/bin/bash x=5; # inicializuje x na hodnotu 5 # nyní se bude testovat hodnota x: case $x in 0) echo "Hodnota x je 0." ;; 5) echo "Hodnota x je 5." ;; 9) echo "Hodnota x je 9." ;; *) echo "Hodnota x neni ani 0, ani 5, ani 9." esac
Syntax:
while seznam; do seznam; done until seznam; do seznam; done
Seznam ’do seznam;’ se provádí tak dlouho, dokud je návratový kód
Struktura for se používá, chcete-li během cyklu použít různé hodnoty pro jednu proměnnou, a to tak, že při každém průběhu cyklu bude mít proměnná jinou hodnotu. Například chcete napsat skript, který desetkrát vytiskne každou sekundu tečku (.) lze to provést takto:
#!/bin/bash echo -n "Zjistuji chyby v systemu" for dots in 1 2 3 4 5 6 7 8 9 10; do echo -n "." sleep 1; done echo "System is clear."