Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Následující verze | Předchozí verze | ||
bash_pokračování [2012/07/16 15:01] – vytvořeno ubuntu | bash_pokračování [2019/02/25 18: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:// | ||