Exit status a test
Stránky: | E-learning VŠCHT Praha |
Kurz: | Linux, shell |
Kniha: | Exit status a test |
Vytiskl(a): | Nepřihlášený host |
Datum: | neděle, 30. června 2024, 11.14 |
1. Exit status a test
Pro pochopení fungování řídicích konstrukcí podmínek a větvení je potřeba nejprve vysvětlit pojmy exit status a test.
2. Exit status
Exit status je celé číslo z rozsahu 0 - 255, které generuje každý příkaz shellu, když se program ukončí. Číslo 0 vždy znamená, že program se provedl úspěšně. Čísla z rozsahu 1 - 255 představují vždy nějakou konkrétní chybu. Exit status naposledy provedeného příkazu lze vypsat příkazem echo $?
Exit status je také možné nastavit / vyvolat manuálně pomocí příkazu exit. Jako argument příkazu se uvede libovolné celé číslo.
Pokud je číselná hodnota argumentu příkazu exit větší než 255, je návratovou hodnotou příkazu zbytek po celočíselném dělení číslem 256. Tedy dostaneme opět číslo z rozsahu 0 -
255.
3. Test
Pro vyhodnocení libovolných podmínek, které se obvykle definují v podmíněných konstrukcích, můžeme využít několik speciálních příkazů. Jsou to příkazy true, false, test, [, [[, ((. Obecně se tyto příkazy nazývají testy.
3.1. Příkaz true
Příkaz true vždy vrací exit status 0. To znamená, že se vždy provede správně.
3.2. Příkaz false
Příkaz false vždy vrací exit status 1. To znamená, že se vždy provede s chybou.
3.3. Příkaz test
Příkaz test je přímo určen k vyhodnocování podmínek. Umí vyhodnotit porovnání číselných hodnot, řetězcových hodnot, ale také existenci souborů, nebo nastavení jejich různých atributů. Pokud je podmínka předaná příkazu splněna, vrací program exit status 0. Pokud není podmínka splněna, vrací program exit status 1.
Porovnání číselných hodnot
Operátor | Význam | |
---|---|---|
-eq | rovnají se
|
|
-ne | nerovnají se
|
|
-le | je menší nebo rovno
|
|
-lt | je menší
|
|
-ge | je větší nebo rovno
|
|
-gt | je větší
|
Porovnání řetězcových hodnot
Operátor |
|
Význam |
---|---|---|
-n |
|
délka řetězce je větší než nula
|
-z |
|
délka řetězce je nula
|
==
|
|
řetězce jsou stejné
|
!=
|
|
řetězce jsou různé
|
Porovnání souborů a jejich atributů
Operátor | Význam | |
---|---|---|
-e | soubor existuje
|
|
-f | soubor existuje a je to běžný soubor
|
|
-d | soubor existuje a je to adresář
|
|
-b | soubor existuje a je to block-special soubor
|
|
-c | soubor existuje a je to character-special soubor
|
|
-L | soubor existuje a je to symbolic link
|
|
-s | soubor existuje a jeho velikost je větší než 0
|
|
-r | soubor existuje a je nastaven ke čtení pro aktuálního uživatele
|
|
-w | soubor existuje a je nastaven pro zápis pro aktuálního uživatele
|
|
-x | soubor existuje a nastaven pro spuštění pro aktuálního uživatele
|
3.4. Příkaz [
Příkaz [ je pouze syntakticky modernější formou příkazu test. Platí pro něj všechna pravidla stejně jako pro příkaz test.
POZOR - Symbol [ reprezentuje jméno příkazu, je tedy potřeba za tímto symbolem zachovat mezeru, aby shell tento příkaz správně interpretoval. Stejně tak je potřeba pamatovat na uzavření příkazu symbolem ].
3.5. Příkaz [[
Příkaz [[ je modernější náhradou příkazu test. Zahrnuje všechny výrazy a operátory příkazu test, rozšiřuje funkci stávajících operátorů a implementuje některé další pokročilejší operátory.
Přidané operátory
Operátor | Význam | |
---|---|---|
== | řetězce jsou stejné, v řetězcích lze navíc použít operátory pro expansi cesty
|
|
=~ | řetězec splňuje regulární výraz podle ERE
|
POZOR - Symbol [[ reprezentuje jméno příkazu, je tedy potřeba za tímto symbolem zachovat mezeru, aby shell tento příkaz správně interpretoval. Stejně tak je potřeba pamatovat na uzavření příkazu symbolem ]].
3.6. Příkaz ((
Příkaz (( představuje nejmodernější a nejpokročilejší test v shellu. Implementuje užitečná rozšíření pro práci s celými čísly, nahrazuje textové operátory matematickými symboly, umožňuje v rámci výrazu přiřazovat hodnoty proměnným, umožňuje použít ternární / kondiční operátor a samozřejmě logické operátory.
Operátory porovnání
Operátor | Význam | |
---|---|---|
== | rovnají se
|
|
!= | nerovnají se
|
|
<= | je menší nebo rovno
|
|
>= | je větší nebo rovno
|
|
< | je menší než
|
|
> | je větší než
|
Operátory přiřazení
Operátor
|
Význam | |
---|---|---|
= | přiřadí hodnotu parametru
|
|
+= | přičte k parametru hodnotu a přiřadí
|
|
-= | odečte od parametru hodnotu a přiřadí
|
|
*= | vynásobí parametr hodnotou a přiřadí
|
|
/= | vydělí parametr hodnotou a přiřadí
|
|
%= | přiřadí zbytek po celočíselném dělení parametru hodnotou
|
Ternární / kondiční operátor
Operátor | Význam | |
---|---|---|
exp1?exp2:exp3 | Splňuje výraz exp1 zadanou podmínku? Pokud ano, vykonej výraz exp2, jinak vykonej výraz exp3.
|
POZOR - Symbol (( reprezentuje jméno příkazu, je tedy potřeba za tímto symbolem zachovat mezeru, aby shell tento příkaz správně interpretoval. Stejně tak je potřeba pamatovat na uzavření příkazu symbolem )).
3.7. Logické operátory
Všechny dříve uvedené testy disponují logickými operátory, které lze použít pro kombinování více definovaných podmínek.
Logické operátory
|
test, [
|
[[, ((
|
||
---|---|---|---|---|
AND | -a | && | ||
OR | -o | ||
|
||
NOT | ! | ! |