=====Metaznaky shellu===== ====Úvod==== //Shell// je základní program, pomocí kterého v textovém režimu komunikuje uživatel s počítačem. První, co si každý vyzkouší je, že se pomocí něj dají spouštět programy (textové - např. editor ''nano'' i grafické (například ''firefox''). Shell toho ale umí mnohem víc. ===Mimochodem:=== Samotných shellů existuje více. Klasický shell se jmenuje //Bourne shell//, a jeho binárka je ''/bin/sh'' . Větší uživatelský komfort nabízí BASH(//Bourne again shell//) - ''/bin/bash'', který je se ''sh'' zpětně kompatibilní. Pak jsou také další shelly - například ''csh'', jehož syntaxe se více podobá programovacímu jazyku C. **Shell** je plnohodnotný programovací jazyk - má proměnné, i klasické řídící příkazy (if-else, for, while). Oproti většině klasických jazyků (C,C#,Java) se ovšem nekompiluje, ale //interpretuje// - proto se mu občas říká //skriptovací//. Většinou používáme shell ke spouštění příkazů a programů. Přičemž se na první pohled nepozná rozdíl mezi interním příkazem shellu (echo, cd, read, pwd, let, eval, set, exit, true) a externím programem (jenž je uložen v jedné ze složek v systémové $PATH, kupříkladu v /usr/bin ... příkladem je ''cut'',''sort'',''nano'',''tr'' ...) ===Proces vykonávání=== Co ale shell udělá, když mu napíšete něco jako: cut -f: -n3 - Koukne se do proměnné $IFS. Ta je defaultně nastavená na bílý znak (mezeru). ''IFS'' znamená //Internal Field Separator// - //vnitřní oddělovač polí//. Tímto znakem se pak zadaný příkaz rozřeže. - První neprázdná položka se bere jako příkaz (může jít i o program s cestou). Shell spustí tento příkaz/program ... a nasype mu jako parametry další položky. V tomto příkladu tedy dostane program cut (který se nachází na disku jako binárka /usr/bin/cut) parametry ''-f:'' a ''-n3''. - Po ukončení programu shell znovu zobrazí příkazovou řádku. Ta může vypadat asi takhle: uzivatel@pocitac:~$ ---- ===Ukončení programů:=== Některé programy se ukončí samy poté, co provedou výpočet a zobrazí výstup. Některé ale ne. Většinou čekají na nějaký uživatelský vstup, nebo jsou svou podstatou nekonečné (''yes'', ''ping''). Neexistuje ustálený způsob, jak je zavřít. První pokus by měl být '''Ctrl+D'''. To shellu zpravidla předá znak označující konec vstupu. Nezabere-li to, '''Ctrl+C''' - vyšle běžícímu programu signál SIGINT (signál přerušení). Některé složitější programy však mají vlastní způsob vypínání. Většina (třeba ''nano'' se uzavírá ctrl+x) to alespoň ukáže v nějakém menu. Textové editory/zobrazovače se uzavírají napsáním '':q'' a odentrováním. Takhle zavřete zapeklitý textový editor ''vi'', a také ''man'',''less'',''more''. ===Metaznaky=== Metaznaky jsou znaky na vstupu se speciálním významem. ^ Znak ^ Co dělá ^ Příklad ^ | ''$'' | Uvozuje proměnnou při jejím vypisování. || | ''[mezera]'' | Oddělovač parametrů || | ''*'' | Ve jménech souborů - rozvíjení všech možností jakéhokoliv počtu znaků | ''cp *.jpg /mnt/disk/obrazky/'' | | ''?'' | Ve jménech souborů - rozvíjení všech možností jednoho znaku | ''rm ABC_??.jpg''| | ''[konec řádky (enter)]'' a '';''|Oddělovač jednotlivých příkazů|| | (''>'' a ''<'') | Přesměrování do/ze souboru | ''echo ahoj > denik.txt''; ''echo neco_dalsiho %%>%%> denik.txt'' | | ''%%|%%'' ''(Pípa)'' | Přesměrování výstupu do dalšího příkazu | ''echo test%%|%% cat'' | | ''&'' | Vykonání příkazu na pozadí | ''ps &'' | | ''&&'' | řetězení příkazů; druhý příkaz se vykoná pouze pokud první uspěje | ''test -e file && exit'' | | ''`'' [zpětný apostrof] | Oblast ohraničenou dvěma apostrofy shell nejprve vykoná jako příkaz, a případný výstup doplní do daného místa | ''echo `cat soubor`'' | ===metaznaky pro ignorování metaznaků:=== ^ Znak ^ Co dělá ^ Příklad ^ | ''\'' | Ignoruj význam následujícího znaku | echo \* | | ''"'' | V úvozovkách se ingorují metaznaky krom $, \, `` | echo "retezec s mezerami" | | ''\''' |V apostrofech se ignorují všechny metaznaky | echo 'test "doslovneho" retezce, * zustava' | ===Příklady=== # Každý z řádků vytiskne zpětné lomítko echo \\ echo '\' #Teď je 19:05 echo "Teď je `date +%H:%M`" #Prakticky stejné jako cat * cat `ls` ===Odkazy=== * [[http://www.gybon.cz/~rusek/vyuka/linadd.html]] * [[http://juracerny.sweb.cz/ppu/ppu1.htm]] * [[http://www.linuxvbashi.cz/znaky-a-vyrazy]]