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
  1. 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.
  2. 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.
  3. 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

Nahoru