Prompt.cz

Praktický průvodce Linuxem

Uživatelské nástroje

Nástroje pro tento web


znaky-a-vyrazy

Znaky a výrazy


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

Nástroje pro stránku