Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze | |||
| bash_pokračování [2012/10/19 12:20] – doplnění prvního řádku skriptu do code 212.79.108.75 | bash_pokračování [2019/02/25 17:21] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| + | ====== Bash pokračování ====== | ||
| + | |||
| + | Bash pokračování navazuje na [[Bash úvod]] a seznámí Vás s pokročilými technikami skriptovacího jazyka Bash. V této části se dozvíte jak používat proměnné a řídící struktury. Také budete schopni napsat své první jednoduché skripty. | ||
| + | |||
| + | ====== Diakritika ====== | ||
| + | |||
| + | {{.: | ||
| + | |||
| + | ====== Způsob zápisu ====== | ||
| + | Doporučuji používat následující způsob: \ | ||
| + | * na jednotlivý řádek souboru = jeden řádek kódu | ||
| + | * nad každý řádek kódu = jeden řádek komentáře, | ||
| + | |||
| + | {{.: | ||
| + | |||
| + | ====== Sudo ====== | ||
| + | Tento magický příkaz slouží k tomu, abyste se svým účtem mohli vykonávat úkony, které může pouze správce. Je to velká výhoda, protože kdyby tento příkaz neexistoval, | ||
| + | |||
| + | {{.: | ||
| + | |||
| + | {{.: | ||
| + | |||
| + | {{.: | ||
| + | |||
| + | ====== Komentáře ====== | ||
| + | V Bashi se komentáře označují znakem mřížky **#**, všechno za tímto znakem je ignorováno a slouží to především k tomu, abyste ve velkém kusu kódu věděli co dělá která část. | ||
| + | |||
| + | {{.: | ||
| + | |||
| + | ====== Příprava skriptu ====== | ||
| + | Nyní Vám poradím jak si začít psát vlastní skript.\ | ||
| + | * Pokud máte otevřen terminál, vytvořte si nový soubor **touch skript.sh**. Tento soubor můžete také vytvořit přes **Geany -> Uložit jako**. Koncovka **.sh** značí že se jedná o skript, nezáleží na ní, ale jedná se nám o zpřehlednění skriptu od ostatních programů pomocí koncovky. | ||
| + | * Nyní si spusťte libovolný editor pro úpravu textu. Doporučuji používat [[Geany]] nebo [[Vim]]. | ||
| + | * Jako první řádek každého bashové skriptu musí být následující řádek: | ||
| + | < | ||
| + | #!/bin/bash | ||
| + | </ | ||
| + | * Nyní soubor uložte, musíme mu nastavit příznak spustitelnosti, | ||
| + | * To proveďte v konzoli přes příkaz: | ||
| + | < | ||
| + | chmod +x skript.sh | ||
| + | </ | ||
| + | < | ||
| + | ./skript.sh | ||
| + | </ | ||
| + | * Nyní budete všechny Vaše kusy kódy a příkazy psát od druhého řadku dolů. | ||
| + | |||
| + | {{.: | ||
| + | |||
| + | ====== Proměnné ====== | ||
| + | Pro uchování dat používá každý programovací jazyk proměnné a Bash není výjimkou. Proměnné v Bashi nemají svůj datový typ, proto se do nich dá ukládat cokoliv. Mají pevně definovanou syntax: \ | ||
| + | < | ||
| + | promenna=obsahPromenne | ||
| + | </ | ||
| + | {{.: | ||
| + | |||
| + | {{.: | ||
| + | |||
| + | Proměnná se skládá ze svého **názvu** a **obsahu**.\ | ||
| + | **Název** může obsahovat písmena a čísla (**nesmí začínat číslem !**), které vystihují to, jakých bude proměnná nabývat hodnot | ||
| + | **Obsah** může být cokoliv, textový řetězec, číslo nebo výstup programů\ | ||
| + | |||
| + | Pomocí následující příkladů Vám demonstruji použití proměnných: | ||
| + | < | ||
| + | # definice promenne s deklaraci | ||
| + | promenna=" | ||
| + | # promennou vypiseme pres echo | ||
| + | echo " | ||
| + | # ekvivalentni vypis je take takto, vsimnete si jak ji obteka text | ||
| + | echo " | ||
| + | # promenna muze take nest obsah prikazu, používáme speciální uvozovky `` | ||
| + | promenna2=`ls` | ||
| + | # vypiseme promenna2 | ||
| + | echo " | ||
| + | # ukazka prepsani promenne | ||
| + | pom=" | ||
| + | pom=" | ||
| + | pom=" | ||
| + | # toto vypise cau, protoze je to posledni vec co se priradila do promenne pom | ||
| + | echo " | ||
| + | </ | ||
| + | ====== Read ====== | ||
| + | Read je příkaz pro získání dat od uživatele.\ | ||
| + | Syntaxe: \ | ||
| + | < | ||
| + | read PROMENNA | ||
| + | </ | ||
| + | Následující příkaz mluví za vše: \ | ||
| + | < | ||
| + | echo -n " | ||
| + | read vek | ||
| + | echo "Vas vek je $vek" | ||
| + | </ | ||
| + | |||
| + | ====== If ====== | ||
| + | If je řídící struktura, která slouží k rozhodovací podmínce **jestli něco platí či neplatí dělej**.\ | ||
| + | |||
| + | Syntaxe: \ | ||
| + | < | ||
| + | # Jednoduchý If | ||
| + | if [ podmínka ] ; then | ||
| + | kus kódu, který se vykoná pokud platí podmínka | ||
| + | fi | ||
| + | |||
| + | # Složený If | ||
| + | if [ podmínka ] ; then | ||
| + | kus kódu, který se vykoná pokud platí podmínka | ||
| + | else | ||
| + | kus kódu, který se vykoná pokud neplatí podmínka | ||
| + | fi | ||
| + | |||
| + | # Složený If s dalším If | ||
| + | if [ podmínka ] ; then | ||
| + | kus kódu, který se vykoná pokud platí podmínka | ||
| + | elif [ podmínka2 ] ; then | ||
| + | kus kódu, který se vykoná pokud platí podmínka2 | ||
| + | fi | ||
| + | </ | ||
| + | Příklad: \ | ||
| + | < | ||
| + | pom=" | ||
| + | if [ ! " | ||
| + | echo "Neni to cislo dva" | ||
| + | else | ||
| + | echo "Je to cislo dva" | ||
| + | fi | ||
| + | </ | ||
| + | ===== Podmínky ===== | ||
| + | Podmínky můžou být následující: | ||
| + | * Řetězce: | ||
| + | * **$promenna** délka řetězce je nenulová | ||
| + | * **-z $promenna** délka řetězce je nulová | ||
| + | * **" | ||
| + | * **" | ||
| + | * Čísla: | ||
| + | * **" | ||
| + | * **" | ||
| + | * **" | ||
| + | * **" | ||
| + | * **" | ||
| + | * **" | ||
| + | * Soubory: | ||
| + | * **" | ||
| + | * **" | ||
| + | * **" | ||
| + | * **-e " | ||
| + | * **-d " | ||
| + | * **-f " | ||
| + | * **-L " | ||
| + | * **-w " | ||
| + | * **-x " | ||
| + | |||
| + | {{.: | ||
| + | |||
| + | ===== Řetězení podmínek ===== | ||
| + | Podmínky se dají spojovat do jedné přes operátor **&& | ||
| + | Způsob zápisuje je dvojí: \ | ||
| + | < | ||
| + | if [ -e " | ||
| + | </ | ||
| + | |||
| + | Druhý styl je ve výsledku stejný jako u prvního, ale způsob zápisu mně příjde elegantnější: | ||
| + | < | ||
| + | -o znamená nebo, ||, OR | ||
| + | -a znamená a současně, &&, AND | ||
| + | if [ -e " | ||
| + | </ | ||
| + | ====== Switch ====== | ||
| + | Switch je takový rozsáhlejší **If**. | ||
| + | |||
| + | < | ||
| + | case " | ||
| + | root | honza ) # hodnoty: root nebo fuky | ||
| + | echo "Ahoj Honzíku" | ||
| + | ;; | ||
| + | * ) # vsechno ostatni moznosti | ||
| + | echo "Ahoj uživateli" | ||
| + | ;; | ||
| + | esac | ||
| + | </ | ||
| + | ====== While ====== | ||
| + | While patří k cyklům. | ||
| + | |||
| + | < | ||
| + | while [ " | ||
| + | do # smycka po done, co se neustale opakuje, dokud plati podminka | ||
| + | #echo | ||
| + | echo "Dalsi slovo < | ||
| + | echo -n "Vase volba: " | ||
| + | read data | ||
| + | if [ " | ||
| + | break # break slouzi k vlastnimu ukonceni cyklu a pokracovani dal, v toku programu | ||
| + | fi | ||
| + | done # konec cyklu | ||
| + | </ | ||
| + | ====== For ====== | ||
| + | For patří k posledním zástupcům cyklů. Používáme jej tehdy, když chceme zajistit nějaký určitý (i neurčitý) počet | ||
| + | opakování bloku příkazů. | ||
| + | |||
| + | < | ||
| + | for i in {1..5} # promenna i bude v rozsahu 1 az 5 | ||
| + | do # 5x se provede tento blok | ||
| + | echo " | ||
| + | done | ||
| + | |||
| + | # Jina syntaxe = stejny efekt | ||
| + | for (( i=1; i<=5; i++ )) | ||
| + | do | ||
| + | echo " | ||
| + | done | ||
| + | </ | ||
| + | ====== Funkce ====== | ||
| + | Funkce se v bashi mají syntax: | ||
| + | |||
| + | < | ||
| + | function nazevFunkce { | ||
| + | # prikazy pro provedeni funkce | ||
| + | } | ||
| + | </ | ||
| + | Funkce se poté ve skriptu volá takto: | ||
| + | < | ||
| + | nazevFunkce | ||
| + | </ | ||
| + | ====== Závěr ====== | ||
| + | Tohle je pouze základní přehled nástrojů bashe a jeho použití ve vlastních skriptech. Pro lepší pochopení a naučení se dělání vlastních skriptů, | ||
| + | zkuste si podle návodu používat mnou vytvořené skripty. | ||
| + | |||
| + | ====== Odkazy ====== | ||
| + | * [[http:// | ||