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 ! !