Skripty

Skripty

Úvod

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é

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:

Spojování řetězců

Dvě proměnné: jmeno="Bart" a prijmeni="Simpson" můžeme spojit: cele="$jmeno $prijmeni".

Systémové proměnné

První skripty

Hello world. První řádka programu říká Linuxu, co se má použít za interpret.

#!/bin/bash
echo "Hello, world!"

Spuštění skriptu

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.

2. script

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!"

Aritmetika

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.

Uživatelský vstup

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!"

Řídící struktury

Větvení

If

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

Switch

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

Cykly

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."