| SPECIÁLNÍ ZNAKY | mají zvláštní význam, interpretem je shell |
|---|---|
| $ | dolar – prompt (výzva); vyjadřuje připravenost shellu k přijetí příkazu (výchozí označení pro běžného uživatele) |
| # | křížek 1) prompt (výzva); vyjadřuje připravenost shellu k přijetí příkazu (výchozí označení pro uživatele root) 2) komentář v konfiguračních souborech a skriptech; každé slovo uvedené po tomto znaku je systémem ignorováno, výjimkou je „#!“ (shebang) na začátku skriptu následovaný absolutní cestou k shellu nebo programu určenému pro spuštění souboru |
| / | lomítko 1) představuje kořenový adresář 2) odděluje adresáře v absolutní cestě |
| . | tečka; představuje aktuální (pracovní) adresář |
| .. | dvě tečky; představují nadřazený adresář |
| - | spojovník 1) uvozuje volby příkazu $ ls -a2) čte data ze STDIN $ gzip -cd soubor.tar.gz | tar -xf - |
| -- | dvojitý spojovník 1) uvozuje dlouhé volby příkazu $ ls --all2) označuje ukončení voleb příkazu (následující řetězec je považován za argument) $ mkdir -- -dir | $ mkdir ./-dir(vytvoří adresář „-dir“) |
| \ | zpětné (obrácené) lomítko (na konci řádku); označuje zalomení řádku příkazu |
| > | znaménko „větší než“ – $PS2 (na začátku řádku); označuje pokračování řádku příkazu |
| Kolony: | posloupnosti příkazů oddělených jedním z následujících řídících operátorů: |
| | | roura; propojí standardní výstup jednoho příkazu pomocí roury se standardním vstupem jiného příkazu$ ls -l | grep "^d" | wc -l(vypíše počet podadresářů v pracovním adresáři) |
| |& | 2>&1 | | roura a ampersand; propojí standardní výstup a standardní chybový výstup jednoho příkazu pomocí roury se standardním vstupem jiného příkazu |
| Seznamy: | posloupnosti příkazů nebo kolon oddělených jedním z následujících řídících operátorů: |
| ; | středník; označuje konec příkazu (totéž co nový řádek)$ cd /tmp; ls -la |
| & | ampersand; spustí příkaz na pozadí ve vnořeném shellu (vhodné zejména pro větší úlohy; návratový kód je vždy nulový) |
| && | dvojitý ampersand; spustí následující příkaz, jen pokud předchozí skončí úspěšně (vrátí nulový návratový kód)$ mount /mnt/fd && cp -R /mnt/fd /tmp/fd && umount /mnt/fd(připojí disketu, zkopíruje její obsah do „/tmp/fd“ a disketu odpojí) |
| || | dvojitá roura; spustí následující příkaz, jen pokud předchozí skončí neúspěšně (vrátí nenulový návratový kód)$ [ $? -eq 0 ] || echo $?(vypíše návratový kód předchozího příkazu, skončil-li neúspěšně) |
| Složené příkazy: | skupiny příkazů, se kterými se zachází jako s jednou jednotkou |
| (<seznam>) | kulaté závorky; seskupují příkazy (příkazy se provedou ve vnořeném shellu)$ (a; b) & c &(příkazy „a“ a „b“ se provedou na pozadí sekvenčně, tzn. jeden za druhým, příkaz „c“ paralelně) |
| { <seznam>;} | složené závorky; seskupují příkazy (příkazy se provedou v aktuálním shellu)$ { a; b;} & c &(příkazy „a“ a „b“ se provedou na pozadí sekvenčně, tzn. jeden za druhým, příkaz „c“ paralelně) $ cd ~/.ssh 2> /dev/null || { mkdir ~/.ssh; cd ~/.ssh;}(vstoupí do daného adresáře, pokud neexistuje, napřed ho vytvoří) |
| PARAMETRY | představují entity, v nichž jsou uloženy určité hodnoty |
| Poziční parametry: | číselné parametry uvnitř shellového skriptu představující argumenty předané skriptu na příkazovém řádku v odpovídajícím pořadí |
| <n> | {<n>} | číselný parametr začínající od 1 |
| Zvláštní parametry: | parametry, jejichž obsah je pouze pro čtení |
| <parametr> | {<parametr>} | # uvnitř skriptu představuje celkový počet argumentů předaných skriptu na příkazovém řádku, * či @ uvnitř skriptu představuje všechny argumenty předané skriptu na příkazovém řádku (dochází-li k expanzi uvnitř dvojitých uvozovek, "$*" expanduje do jednoho slova s každým pozičním parametrem odděleným mezerou, zatímco "$@" expanduje každý poziční parametr do samostatného slova), 0 uvnitř skriptu představuje jméno shellového skriptu, na příkazovém řádku představuje jméno současného shellu, $ představuje PID současného shellu, ? představuje návratový kód posledního procesu spuštěného na popředí, ! představuje PID posledního procesu spuštěného na pozadí, _ představuje poslední argument posledního provedeného příkazu, - představuje aktuální volby shellu |
| Proměnné: | „úložiště“ informací, skládají se z názvu a přiřazené hodnoty |
| <promenna>=<hodnota> | definice lokální proměnné (zůstane definovaná v shellu až do jeho ukončení)$ xy="den"(definuje proměnnou „xy” a přiřadí ji hodnotu „den”) $ pracovni_adresar=$(pwd)(přiřadí proměnné hodnotu výstupu příkazu) $ PATH="$PATH:~/skripty"(přidá adresář „skripty” do proměnné „PATH”) $ PS1="[\u@\h \W]\$ "(nastaví prompt uživatele; proměnnou „PS1” lze definovat následovně: \u = uživatel, \h = jméno počítače, \W = pracovní adresář) |
| Pole: | datové struktury, které umožňují uložit více hodnot do jedné proměnné |
| <indexovane_pole>=(<hodnota1> <hodnota2> <hodnota3> ...) | definice indexovaného pole (uspořádaného seznamu položek); každá hodnota v poli je spojena s číselným indexem, který začíná 0 pro první položku a zvyšuje se o 1 pro každou další položku v poli, a pomocí odpovídajícího indexu se k dané hodnotě přistupuje; indexovaná pole mohou být před definováním volitelně deklarována$ barvy=("modra" "cervena" "svetle zelena") | $ declare -a barvy=("modra" "cervena" "svetle zelena")(definuje indexované pole „barvy” a přiřadí mu tři různé hodnoty) $ barvy+=("zluta" "bila")(přidá do indexovaného pole další hodnoty) $ barvy[3]="cerna"(přiřadí hodnotu „cerna“ položce indexovaného pole s indexem 3) |
| <asociativni_pole>=(<klic1> <hodnota1> <klic2> <hodnota2> <klic3> <hodnota3> ...) | <asociativni_pole>=([<klic1>]=<hodnota1> [<klic2>]=<hodnota2> [<klic3>]=<hodnota3> ...) | definice asociativního pole (slovník – páry klíč-hodnota); každá hodnota v poli je spojena s jedinečným klíčem a pomocí odpovídajícího klíče se k dané hodnotě přistupuje; asociativní pole musí být před definováním explicitně deklarována$ declare -A hostname_to_ip=(["server1"]="192.168.1.1" ["server2"]="192.168.1.2" ["server3"]="192.168.1.3")(deklaruje a definuje asociativní pole „hostname_to_ip“ a přiřadí mu tři různé klíče se svými hodnotami) $ hostname_to_ip["server4"]="192.168.1.4" | $ hostname_to_ip+=(["server4"]="192.168.1.4")(přidá do asociativního pole další pár klíč-hodnota) |
| EXPANZE | nahrazují určité řetězce nebo výrazy jejich odpovídajícími hodnotami nebo výsledky |
| Expanze složených závorek: | proces, který vytváří kombinace řetězců nebo sekvencí na základě zadaného vzoru |
| {<retezec>[,<retezec>]} | složené závorky; definují řetězec (řetězce oddělené čárkou), jenž má daný výraz obsahovat; interval po sobě jdoucích čísel nebo písmen je vyjádřen „..”; ke každému řetězci může být přidána předpona či přípona, která se stává součástí výrazu$ mkdir p{an,lo,ru}t(vytvoří adresáře „pant”, „plot” a „prut”) $ mv text{1,2,3,4,5}.txt text_0{1,2,3,4,5}.txt(přejmenuje soubory „textX.txt” na „text_0X.txt”) # mv /etc/pam.d/sshd{,.broken}(přejmenuje soubor „/etc/pam.d/sshd” na „/etc/pam.d/sshd.broken”) $ touch .{a,b,c,d,e}(vytvoří skryté soubory daných jmen) $ touch {1..100}(vytvoří sto souborů) $ echo {A..Z} {a..z} {0..9}(zobrazí interval daných znaků) $ echo {A..Z}{a..z}{0..9}(zobrazí trojmístné kombinace znaků v daném pořadí) |
| Vlnovková expanze: | proces, který nahradí znak vlnovky odpovídající cestou k domovskému adresáři uživatele |
| ~ | vlnovka; představuje domovský adresář přihlášeného uživatele ($HOME), ~<uzivatel> domovský adresář daného uživatele, ~+ pracovní adresář ($PWD), ~- předchozí pracovní adresář ($OLDPWD)$ cp ~/soubor.txt /tmp(zkopíruje soubor „soubor.txt” z domovského adresáře uživatele do adresáře „/tmp”) |
| Expanze parametrů: | proces, který nahrazuje parametry jejich hodnotami |
| $<n> | ${<n>} | hodnota pozičního parametru; je-li expandován poziční parametr sestávající z více než jedné číslice, musí být uzavřen ve složených závorkách$ ./zaloha.sh /media/disk-1(určí zařízení, kam se záloha provede – ve skriptu je uvedeno např. „target_dir="$1"”) |
| $<parametr> | ${<parametr>} | hodnota zvláštního parametru$ echo $?(vypíše návratový kód posledního spuštěného příkazu) |
| $<promenna> | ${<promenna>} | hodnota proměnné; za proměnnou musí být mezera, jinak musí být uzavřena do složených závorek (kromě případů, kdy následuje „.“, „$“, „!“ či „[]“)$ echo $xy(vypíše hodnotu proměnné „xy” – „den”) $ echo je novy ty$xy | $ echo "je novy ty$xy"(vypíše „je novy tyden”) $ echo "ty${xy}ni dovolena"(vypíše „tydenni dovolena”) $ echo $SHELL(vypíše přihlašovací shell uživatele) |
| ${#<promenna>} | délka hodnoty proměnné (počet znaků) |
| ${<indexovane_pole>[n]} | hodnota položky indexovaného pole; indexované pole musí být uzavřeno ve složených závorkách$ echo "Prvni barva: ${barvy[0]}"(vypíše „Prvni barva: modra“) $ echo ${barvy[@]}(vypíše všechny položky v indexovaném poli oddělené mezerou) $ for barva in "${barvy[@]}"; do echo "Barva: $barva"; done(vypíše každou položku v indexovaném poli na samostatný řádek) |
| ${#<indexovane_pole>[@]} | délka hodnot indexovaného pole (počet položek) |
| ${<asociativni_pole>[<klic>]} | hodnota klíče asociativního pole; asociativní pole musí být uzavřeno ve složených závorkách$ echo ${hostname_to_ip["server2"]}(vypíše „192.168.1.2”) $ echo ${hostname_to_ip[@]}(vypíše všechny hodnoty v asociativním poli oddělené mezerou) $ echo ${!hostname_to_ip[@]}(vypíše všechny klíče v asociativním poli oddělené mezerou) $ for server in "${!hostname_to_ip[@]}"; do echo "$server: ${hostname_to_ip[${server}]}"; done(vypíše každý klíč se svou hodnotou v asociativním poli na samostatný řádek) |
| ${#<asociativni_pole>[@]} | délka hodnot asociativního pole (počet položek) |
| Expanze jmen: | proces, ve kterém se používají metaznaky k zastoupení jmen existujících souborů a adresářů, které odpovídají danému vzoru |
| * | hvězdička; zastupuje libovolný počet jakýchkoliv znaků včetně mezery, kromě výrazů začínajících tečkou# rm -Rf /*(smaže obsah adresáře) $ ls *' '*(vypíše soubory a adresáře obsahující v názvu mezeru) |
| ? | otazník; zastupuje libovolný znak včetně mezery, kromě výrazů začínajících tečkou# find / -name "*.19??"(najde soubory a adresáře s příponou „.19xx“) # find / -name "???*"(najde soubory a adresáře, jejichž název obsahuje alespoň tři znaky) |
| [...] | hranaté závorky; zastupují libovolný znak v seznamu; seznam může tvořit výčet jednotlivých znaků, interval znaků (obsahuje „-“, např. A-Z, a-z či 0-9) nebo třída znaků ([:alnum:], [:alpha:], [:ascii:], [:blank:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], [:word:], [:xdigit:]); „!“ či „^“ na začátku seznamu vylučuje následující znaky (skupiny znaků)$ ls text_[ab].txt(vypíše soubory „text_a.txt” a „text_b.txt”) $ find . -name "[a-zA-Z[:digit:]]"(najde soubory a adresáře obsahující v názvu pouze jedno malé či velké písmeno nebo číslici) $ rm -f .[!.]*(smaže všechny skryté soubory v pracovním adresáři) $ ls ~/.ssh/id_*[!.pub](vypíše všechny soukromé ssh klíče) |
| Aritmetická expanze: | proces, který vyhodnocuje aritmetické výrazy a nahrazuje je jejich výsledky |
| $((<vyraz>)) | $[<vyraz>] | dolar a dvojité kulaté závorky nebo dolar a hranaté závorky; aritmetický výraz uvnitř je vyhodnocen a nahrazen svým výsledkem$ echo "2*5=$((2*5))" | $ echo "2*5=$[2*5]"(zobrazí „2*5=10”) $ cisla=(10 20 30); echo "Soucet prvnich dvou polozek = $((cisla[0] + cisla[1]))"(zobrazí „Soucet prvnich dvou polozek = 30”) # uid=500; for usr in a b c; do useradd -u $uid $usr; uid=$(($uid+1)); done(vytvoří tři účty, jejichž UID začíná hodnotou 500 a narůstá o 1) |
| Nahrazení výstupem příkazu: | proces, který nahrazuje příkaz jeho výstupem |
| `<prikaz>` | $(<prikaz>) | zpětné (obrácené) apostrofy nebo dolar a kulaté závorky; příkaz uvnitř je zpracován a nahrazen svým výstupem$ rpm -qf `which xhost` | $ rpm -qf $(which xhost)(výstup příkazu „which xhost” se předá příkazu „rpm -qf”) |
| Nahrazení procesem: | proces, který umožňuje, aby výstup příkazu vypadal jako vstup ze souboru nebo výstup do souboru |
| <(<seznam>) | >(<seznam>) | kulaté závorky a znaménko „menší než“ nebo „větší než“; provedou seznam příkazů, jejichž výstup se uloží do speciálního dočasného souboru (pojmenované roury – FIFO), který se poté předá jako argument aktuálnímu příkazu, jenž očekává soubor, ze kterého bude číst nebo do něj bude zapisovat$ diff <(hostname) /etc/hostname(porovná obsah výstupu příkazu (speciálního souboru) s obsahem daného souboru) $ cat input.txt | tee >(grep a > a.out) >(grep b > b.out) >(grep c > c.out) > /dev/null(filtruje data ze souboru "input.txt" podle daných vzorů a přesměruje je do odpovídajících samostatných souborů) $ echo "$error_message" | tee >(mail -r "$sender" -s "$subject" "$recipients")(zobrazí chybovou zprávu a její obsah odešle e-mailem) |
| ZNAKY PŘESMĚROVÁNÍ | přesměrují standardní vstup, výstup a chybový výstup příkazu |
| < | 0< | přesměrování standardního vstupu ze souboru (STDIN / souborový popisovač 0)$ mail tom@prompt.cz < seznam.txt(napíše uživateli „tom“ email, jehož obsah se nachází v souboru „seznam.txt“) |
| << <oddelovac> | přesměrování standardního vstupu z víceřádkového textu (here-document)#!/bin/bashcat <<EOF > /etc/mujconfig.conf# Muj konfiguracni souborparametr1=hodnota1parametr2=hodnota2parametr3=hodnota3EOF(přesměruje více řádků textu ve skriptu až po oddělovač „EOF“ na STDIN příkazu „cat“) $ cat <<END> Jsem $LOGNAME. <-'> END <-'(interaktivní forma) |
| <<< <retezec> | přesměrování standardního vstupu z jednoho řádku textu nebo proměnné (here-string)$ wc -w <<< "Toto je radek textu"(zpočítá počet slov v řetězci) $ read -a pole_clenu <<< "$clenove"(přečte mezerami oddělený řetězec uložený v proměnné "$clenove", rozdělí ho na jednotlivá slova a každé slovo uloží jako prvek do pole "pole_clenu") |
| > | 1> | přesměrování standardního výstupu do souboru (STDOUT / souborový popisovač 1)$ ls -la > obsah_adresare.txt(výstup příkazu zapíše do daného souboru, který zároveň vytvoří, pokud existuje, přepíše jeho obsah) $ cat a | tee b > c(výstup příkazu zapíše do souborů „b“ a „c“) $ wc -l < report > /tmp/lines(počet řádků souboru „report“ zapíše do „/tmp/lines“) |
| 2> | přesměrování standardního chybového výstupu do souboru (STDERR / souborový popisovač 2)$ cat soubor1 soubor2 > soubor3 2> /dev/null(obsah souborů „soubor1“ a „soubor2“ zapíše do „soubor3“ a standardní chybový výstup příkazu zahodí) $ make all 2> /dev/pts/3(standardní chybový výstup příkazu zobrazí v daném terminálu) |
| 2>&1 | přesměrování standardního chybového výstupu na standardní výstup (záleží na pořadí přesměrování STDOUT)$ ls a b > c 2>&1 | $ ls a b &> c(STDOUT i STDERR zapíše pouze do souboru „c“) $ ls soubor1 soubor2 2>&1 > soubor3(STDERR vypíše na obrazovku a STDOUT zapíše do „soubor3“) $ make all 2>&1 | less(vhodné pokud proces vypisuje více chybových hlášení) |
| &> | přesměrování standardního výstupu a standardního chybového výstupu do souboru# yum install -y libstdc++.x86_64 &> /dev/null(veškerý výstup příkazu zahodí) |
| >> | přesměrování standardního výstupu na konec souboru# echo 'ALL ALL=!SUDOSUDO' >> /etc/sudoers(výstup příkazu přidá na konec daného souboru, pokud soubor neexistuje, vytvoří ho) |
| 2>> | přesměrování standardního chybového výstupu na konec souboru# fsck /dev/sda1 2>> error(standardní chybový výstup příkazu přidá na konec daného souboru, pokud soubor neexistuje, vytvoří ho) |
| ZNAKY VÝLUKY | potlačují význam speciálních znaků |
| \ | zpětné (obrácené) lomítko; brání interpretaci následujícího znaku shellem$ echo \$auto(vypíše „$auto“) |
| '...' | jednoduché uvozovky; brání interpretaci jakéhokoliv řetězce shellem; jednoduché uvozovky však nemohou být uzavřeny samy do sebe$ echo '$auto'(vypíše „$auto“) $ echo '\$auto'(vypíše „\$auto“) $ echo ''$auto''(vypíše „jeep“) |
| "..." | dvojité uvozovky; obdoba jednoduchých, avšak povolují interpretaci zástupných znaků a znaků „$“ a „`“, „\“ má svůj řídící význam pouze tehdy, následuje-li znak „$“, „"“, „`“, „\“ a nový řádek; dvojité uvozovky však nemohou být uzavřeny samy do sebe$ echo "$auto"(vypíše „jeep“) $ echo "\$auto"(vypíše „$auto“) $ echo ""$auto""(vypíše „jeep“) |
| REGULÁRNÍ VÝRAZY (rozšířené) | představují vzory, které slouží k vyhledání určitých řetězců v textu, interpretem je program |
|---|---|
| Speciální znaky: | určují charakter výrazu |
| . | tečka; odpovídá libovolnému jednomu znaku včetně mezery |
| [...] | hranaté závorky; odpovídají právě jednomu znaku v seznamu, „-“ určí interval znaků (např. A-Z, a-z nebo 0-9), „^” na začátku seznamu vylučuje následující znaky |
| [[:alpha:]] / [a-zA-Z] | alfabetické výrazy |
| [[:lower:]] | malá písmena |
| [[:upper:]] | velká písmena |
| [[:digit:]] / [0-9] | numerické výrazy |
| [[:alnum:]] / [0-9a-zA-Z] | alfanumerické výrazy |
| [[:punct:]] | interpunkční znaménka |
| [[:print:]] | tisknutelné výrazy |
| [[:blank:]] | mezera nebo tabulátor |
| (...) | kulaté závorky; seskupují znaky |
| | | roura (logické NEBO); odděluje hledané výrazy |
| \ | zpětné lomítko; snižuje význam následujícího speciálního znaku |
| Poziční znaky: | určují pozici výrazu |
| ^ | stříška; odpovídá začátku řádku |
| $ | dolar; odpovídá konci řádku |
| \<...\> | potlačené lomené závorky; odpovídájí výrazu, který není obklopen písmenem, číslicí nebo podtržítkem |
| Kvantifikátory: | určují počet opakování předchozího výrazu |
| ? | otazník; min. 0krát, max. 1krát |
| * | hvězdička; min. 0krát, max. neomezeně |
| + | plus; min. 1krát, max. neomezeně |
| {<n>} | číslo ve složených závorkách; právě nkrát |
| {<m>,<n>} | čísla ve složených závorkách oddělená čárkou; min. mkrát, max. nkrát |
| {<m>,} | číslo a čárka ve složených závorkách; min. mkrát |
| {,<n>} | čárka a číslo ve složených závorkách; max. nkrát |
| Regulární výraz: | odpovídá: |
| a. | „a“ + jakýkoliv jeden znak |
| a+b | „ab“, „aab“, „aaab“ ... |
| a\+b | „a+b“ |
| o?hon | „ohon“ či „hon“ |
| auto(mobil)? | „auto“ či „automobil“ |
| mikro(fon|skop) | „mikrofon“ či „mikroskop“ |
| ^(Odkud|Kam): | řádek začínající řetězcem „Odkud:“ nebo „Kam:“ |
| ha{1,3} | „ha“ či „haha“ či „hahaha“ |
| <T[DH]> | „<TD>“ či „<TH>“ |
| \<a.*a\> | řetězec začínající i končící písmenem „a“ |
| \[[a-zA-Z]\] | libovolné písmeno uzavřené v „[]“ |
| [0-9]+ | alespoň jedna číslice |
| [0-9]|[1-9][0-9] | interval čísel „0“–„99“ |
| [0-9]{2} | interval čísel „00“–„99“ |
| (19|20)[0-9]{2} | interval čísel „1900“–„2099“ |
| [0-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]+ | hexadecimální čísla |
| ^$ | prázdný řádek |
| [.^az\-] | tečka, stříška, „a“, „z“, zpětné lomítko či spojovník |
| [^ ,.]+ | řetězec neobsahující mezeru, čárku, ani tečku |
| .+0$ | řádek končící znakem „0“, jemuž předchází alespoň 1 znak |
| ^P.*(0[1-9])$ | řádek začínající znakem „P“ a končící znaky „01“–„09“ |
| (\(?(\+|00)[0-9]{1,4}\)?)?([- ]?[0-9]{2,4}){2,4}([[:blank:]]|$)+ | jakékoliv telefonní číslo |
| [a-zA-Z0-9_.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} | jakákoliv e-mailová adresa |
| https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/[^ ]*)? | jakákoliv webová adresa |