Uživatelské nástroje

Nástroje pro tento web


znaky-a-vyrazy

Znaky a výrazy


SPECIÁLNÍ ZNAKY (metaznaky) 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 či 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)
\ zpětné lomítko (na konci řádku), značí zalomení řádku příkazu
> znaménko „větší než“ – $PS2 (na začátku řádku), značí pokračování řádku příkazu
- minus (spojovník)
1) uvozuje volby příkazu
$ ls -a
2) čte data ze STDIN
$ gzip -cd soubor.tar.gz | tar -xf -
-- dvojitý minus (spojovník)
1) uvozuje (dlouhé) volby příkazu
$ ls --all
2) značí ukončení voleb příkazu (následující řetězec je považován za argument)
$ mkdir -- -dir
(vytvoří adresář „-dir“; obdobou je „mkdir ./-dir“)
; středník, značí konec příkazu (totéž co nový řádek)
$ cd /tmp; ls -la
& ampersand, spustí příkaz paralelně na pozadí, aniž by blokoval příkazový řádek (vhodné zejména pro větší úlohy; návratový kód je vždy nulový)
&& dvojitý ampersand, spustí druhý příkaz, jen pokud první skončí úspěšně (resp. vrátí nulový návratový kód)
$ mount /mnt/fd && cp -R /mnt/fd /home/uzivatel/xxx/ && umount /mnt/fd
|| dvojitá roura, spustí druhý příkaz, jen pokud první skončí neúspěšně (resp. vrátí nenulový návratový kód)
$ cd ~/.ssh 2> /dev/null || mkdir ~/.ssh
(<seznam>) kulaté závorky, seskupují příkazy (příkazy se provedou v kopii shellu)
$ (a; b) & c &
(příkazy „a“ a „b“ se provedou na pozadí sekvenčně, tzn. jeden za druhým, příkaz „c“ paralelně)
$ (sleep 30m; echo "konec smeny") &
{ <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 zaloha || { mkdir zaloha; cd zaloha;}
{<retezec>} složené závorky, definují řetězec (řetězce oddělené čárkou), jenž má daný výraz obsahovat; 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
$ 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í)
$((<vyraz>)) / $[<vyraz>] dolar a dvojité kulaté závorky / 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]"
2*5=10
# uid=500; for usr in a b c; do useradd -u $uid -g appadmin -d /home/$usr -m $usr; chage -M -1 $usr; uid=$(($uid+1)); done
(vytvoří tři aplikační účty, jejichž UID začíná hodnotou „500” a narůstá o „1”)
`<prikaz>` / $(<prikaz>) apostrofy/dolar a kulaté závorky, příkaz uvnitř je zpracován a nahrazen svým výstupem
$ ls -l `which java` / ls -l $(which java)
(výstup příkazu „which java” se předá příkazu „ls -l”)
PARAMETRY entity, v nichž jsou uloženy hodnoty
Proměnné: „úložiště“ informací, skládají se z názvu a přiřazené hodnoty
<promenna>=<hodnota> definuje lokální proměnnou (zůstane definovaná v shellu až do jeho ukončení)
$ xy="den"
$ pracovni_adresar=$(pwd) / pracovni_adresar=`pwd`
(hodnotou proměnné může být i výstup 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 tímto způsobem: \u = uživatel, \h = jméno počítače, \W = pracovní adresář)
# for home in $(awk -F : '{print $6}' /etc/passwd); do ls -l ${home}/.ssh/id_[rd]sa 2> /dev/null | egrep -v "^-rw-------"; done
(vypíše soubory obsahující soukromé klíče všech uživatelů, jejichž přístupová práva se liší od hodnoty 600)
$<promenna> / ${<promenna>} hodnota proměnné
$ echo $xy
den
$ echo je novy ty$xy / echo "je novy ty$xy"
je novy tyden
$ echo "ty${xy}ni dovolena"
tydenni dovolena
(za proměnnou musí být mezera, jinak je třeba ji uzavřít do složených závorek)
$ echo $pracovni_adresar
/home/root
$ echo $SHELL
(vypíše přihlašovací shell přihlášeného uživatele)
$ echo $TERM
(vypíše typ terminálu; seznam terminálů je uveden v /usr/share/terminfo)
${#<promenna>} délka proměnné (počet znaků)
Poziční parametry: číselné parametry uvnitř shellovém skriptu představující obsah argumentů předaných skriptu na příkazovém řádku v daném pořadí
$<n> / ${<n>} hodnota číselného parametru
$ ./zaloha.sh /media/disk-1
(určí zařízení, kam se záloha provede; ve skriptu je uvedeno např. „target_dir="$1"”)
Zvláštní parametry: parametry, jejichž obsah lze pouze číst
$<parametr> / ${<parametr>} hodnota zvláštního parametru
$# 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 (při použití „$*“ jsou všechny argumenty považovány za jediné slovo, zatímco při použití „$@“ je každý argument považován za samostatné slovo), $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 předchozího procesu spuštěného na popředí, $! představuje PID posledního procesu spuštěného na pozadí
ZNAKY PŘESMĚROVÁNÍ přesměrují standardní vstup / výstup / chybový výstup příkazu
< / 0< přesměrování standardního vstupu (STDIN / souborový popisovač 0)
$ mail tom@atlas.cz < seznam.txt
> / 1> přesměrování standardního výstupu (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 soub1 | tee soub2 > soub3
(výstup příkazu zapíše do více souborů současně)
$ wc -l < report > /tmp/lines
(počet řádků souboru „report“ se zapíše do „/tmp/lines“)
2> přesměrování chybového výstupu (STDERR / souborový popisovač 2)
$ cat soubor1 soubor2 > soubor3 2> /dev/null
(chybový výstup příkazu se zahodi)
$ make all 2> /dev/pts/3
(chybový výstup zobrazí v jiném terminálu)
2>&1 přesměrování chybového výstupu na standardní výstup (záleží však na pořadí přesměrování STDOUT)
$ ls sb1 sb2 > sb3 2>&1 / ls sb1 sb2 &> sb3
(STDOUT i STDERR se zapíše pouze do sb3)
$ ls soub1 soub2 2>&1 > soub3
(STDERR vypíše na obrazovku a STDOUT do soub3)
$ make all 2>&1 | less
(vhodné pokud proces vypisuje více chybových hlášení)
&> přesměrování standardního a chybového výstupu
# yum install -y libstdc++.x86_64 &> /dev/null
>> přesměrování standardního výstupu na konec souboru
$ tail /var/log/messages >> logs.txt
(výstup příkazu přidá na konec daného souboru, pokud neexistuje, vytvoří ho)
2>> přesměrování chybového výstupu na konec souboru
# fsck /dev/sda1 2>> error
<<EOF přesměrování standardního vstupu ze souboru (skriptu)
#!/bin/bash
mail $user <<EOF
<text>
EOF
(přesměruje text ze skriptu až po zvolený řetězec „EOF“ na STDIN příkazu „mail“)
$ cat <<END
> Jsem $LOGNAME. <-'
> END <-'
(interaktivní forma)
| roura, přesměruje výstup jednoho příkazu ke zpracování na vstup příkazu dalšímu
$ cat notes | grep linux
(vypíše všechny řádky souboru obsahující slovo „linux“)
$ ls -l | grep "^d" | wc -l
(vypíše počet podadresářů v pracovním adresáři)
ZÁSTUPNÉ ZNAKY slouží pro specifikaci jmen souborů
* 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 celý systém)
$ ls *' '*
(vypíše z aktuálního adresáře soubory obsahující mezeru v názvu)
? otazník, zastupuje právě jeden libovolný znak včetně mezery, kromě výrazů začínajících tečkou
# find / -name "*.19??"
(najde všechny soubory s příponou „.19xx“)
# find / -name "???*"
(najde všechny soubory, jejichž název obsahuje alespoň 3 znaky)
[...] hranaté závorky, definují právě jeden z uvedených znaků, jenž má či nemá daný výraz obsahovat; pro označení intervalu znaků se užívá „-“ (např. [A-Z], [a-z] nebo [0-9]), pro negaci výčtu znaků slouží „!“ nebo „^“ na začátku posloupnosti
$ ls -l text_[ab].txt
(vypíše údaje o souborech „text_a.txt” a „text_b.txt”)
$ ls -l text_*[ab]*.txt
(vypíše soubory obsahující v názvu kombinaci daných znaků)
$ rm -f .[!.]*
(smaže všechny skryté soubory v aktuálním adresáři)
ZNAKY VÝLUKY potlačují význam speciálních znaků
\ zpětné lomítko, brání interpretaci následujícího znaku shellem
$ echo \$auto
$auto
'...' jednoduché uvozovky, brání interpretaci jakéhokoliv řetězce shellem; jednoduché uvozovky však do sebe samých uzavřít nelze
$ echo '$auto'
$auto
$ echo ''$auto''
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 do sebe samých uzavřít nelze
# find / -type d -name "[A-Z]*"
$ echo "`pwd`"
/home/kuba
$ echo "$auto"
jeep
$ echo "\$auto"
$auto
$ echo ""$auto""
jeep


REGULÁRNÍ VÝRAZY (rozšířené) specifikují daný řetězec v textu, interpretem je program
Speciální znaky: určují charakter výrazu
. tečka, zastupuje libovolný jeden znak včetně mezery
[...] hranaté závorky, definují právě jeden znak z daného výčtu povolených či zakázaných znaků, „^” na začátku závorek zakazuje znaky, „-“ značí interval znaků
(...) kulaté závorky, definují celý výraz
| roura, znamená „nebo“, odděluje hledané výrazy
\ zpětné lomítko, snižuje význam následujícího speciálního znaku
[[: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
Poziční znaky: definují pozici výrazu
^ stříška, značí začátek řádku
$ dolar, značí konec řádku
\<...\> potlačené lomené závorky, definují řetězec, který není obklopen písmenem, číslicí nebo podtržítkem
Kvantifikátory: uvádí 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>} výraz ve složených závorkách, právě nkrát
{<m>,<n>} výraz ve složených závorkách, min. mkrát, max. nkrát
{<m>,} výraz ve složených závorkách, min. mkrát
{,<n>} výraz 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 pomlčka
[^ ,.]+ řetězec znaků neobsahující mezeru, čárku, ani tečku
.+0$ řádek končící znakem „0“, jemuž předchází min. 1 znak
^P.*(0[1-9])$ řádek začínající znakem „P“ a končící znaky „01“–„09“
[+0-9 /-]{9,} jakékoliv telefonní číslo
[a-zA-Z0-9_.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} jakákoliv e-mailová adresa
(https?://)?(w{3}\.)?[a-zA-Z0-9.-]+\.[^ ]{2,} jakákoliv webová adresa
Poslední úprava: 2019/10/08 00:35 autor: Miroslav Bernát

Nástroje pro stránku

počet návštěv: