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 -a 2) čte data ze STDIN $ gzip -cd soubor.tar.gz | tar -xf - |
-- | dvojitý spojovník 1) uvozuje dlouhé volby příkazu $ ls --all 2) 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/bash cat <<EOF > /etc/mujconfig.conf # Muj konfiguracni soubor parametr1=hodnota1 parametr2=hodnota2 parametr3=hodnota3 EOF (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 |