Test (Unix)

**<code>test</code>** je program nachádzajúci sa v Unixových systémoch. Slúži na vyhodnotenie výrazu, ktorý je v danom formáte odovzdaný ako argument na príkazovom riadku. Často sa používa pri vyhodnocovaní podmienok v shelloch (napr. bash). Pomocou tohto príkazu možno overovať vlastnosti súborov alebo textových reťazcov.

Synonymom tohto príkazu je `'''['''` (počiatočná hranatá zátvorka), ktorá ale vyžaduje ukončenie pomocou `''']'''` (koncovú hranatú zátvorku). Pri skriptovaní v unixových shelloch sa namiesto `test vyraz` viac používa ekvivalentný variant , ktorý sa viac podobá programátorskému zápisu.

## Opis
Príkaz `test` v Unixe vyhodnocuje parameter `vyraz`. V novších implementáciach shellu je priamo zabudovaným príkazom, ale stále existujú i externé verzie. V druhej podobe tohto príkazu musia byť  (hranaté zátvorky) obklopené medzerami (pretože `[` je program a shelly kompatibilné s POSIXom vyžadujú medzeru medzi názvom programu a jeho argumentami). V prípade C shellu je nutné testovať názvy súborov. Substitúcia v názvoch súborov (glob) spôsobí ukončenie shellového skriptu.

Príkaz `test` by sa nemal zamieňať za `[[`, ktorý sa objavil v ksh88. `[[` nie je príkaz, ale súčasťou syntaxe ksh88 a neaplikuje substitúcie v názvoch súborov vo výrazoch s globom.

Verziu `test` prítomnú v GNU coreutils napísali Kevin Braunsdorf a Matthew Bradburn. Tento príkaz je prítomný ako samostatný balík pre Microsoft Windows ako súčasť kolekcie UnxUtils natívnych Win32 portov bežných GNU Unix-like utilít. Príkaz `test` bol takisto portnutý pre operačný systém IBM i.

## Syntax
Príkaz `test` sa používa jedným z nasledovných spôsobov:
 test *vyraz*
 [ *vyraz* ]
  *vyraz* 

### Prepínače
Prepínače, s ktorými je možné volať príkaz `test`:

 **-e** NazovSuboru – vráti hodnotu 0 (pravda) ak súbor NazovSuboru existuje

Ďalšie prepínače potom rozširujú funkcionalitu prepínača `'''-e'''` v zmysle, že vracajú hodnotu 0 (pravda), ak súbor existuje a zároveň spĺňa niektoré ďalšie kritérium:

 **-b** NazovSuboru – NazovSuboru je blokový špeciálny súbor
 **-c** NazovSuboru – NazovSuboru je znakový špeciálny súbor
 **-d** NazovSuboru – NazovSuboru je adresár 
 **-f** NazovSuboru – NazovSuboru je bežný súbor
 **-g** NazovSuboru – NazovSuboru má nastavený *Group ID* príznak
 **-h** NazovSuboru – NazovSuboru je symbolický odkaz
 **-k** NazovSuboru – NazovSuboru má nastavený *[[sticky bit]]* príznak
 **-L** NazovSuboru – NazovSuboru je symbolický odkaz
 **-p** NazovSuboru – NazovSuboru je pomenované zreťazenie (named pipe, FIFO)
 **-r** NazovSuboru – NazovSuboru je čitateľný aktuálnym procesom
 **-s** NazovSuboru – NazovSuboru má nenulovú veľkosť
 **-t** DeskriptorSuboru – DeskriptorSuboru je otvorený a asociovaný s terminálom
 **-u** NazovSuboru – NazovSuboru má nastavený User ID príznak
 **-w** NazovSuboru – NazovSuboru je zapisovateľný aktuálnym procesom
 **-x** NazovSuboru – NazovSuboru má nastavený príznak spúšťateľného súboru

Tento zoznam nie je kompletný. 

### Návratová hodnota
Podľa toho, či program prebehol správne, vracia jednu z troch návratových hodnôt:
* `0`, ak je hodnota `''vyraz''` pravdivá
* `1`, ak je hodnota `''vyraz''` nepravdivá alebo úplne chýba
* `>1`, ak došlo k nejakej chybe

## Príklad
Na overenie toho, či súbor neexistuje alebo je prázdny, možno použiť nasledujúce príkazy:


```bash
if test ! -s "$1"
 then
   echo $1 neexistuje alebo je prázdny.
 fi
```


Ak súbor, ktorý je špecifikovaný prvým pozičným parametrom shellového procesu, $1, neexistuje alebo je jeho veľkosť nulová, vypíše sa uvedená správa. Ak parameter $1 existuje a má nenulovú veľkosť, nezobrazí sa žiadna správa. V príkaze musí byť medzera medzi `-s` a názvom súboru. 

Parameter $1 je v úvodzovkách, aby sa zaručilo, že `test` bude fungovať správne, i keď $1 je prázdny textový reťazec. Ak sa nepoužijú úvodzovky a $1 je prázdny textový reťazec, príkaz `test` zobrazí chybovú hlášku:

 test: argument expected.

## Referencie

## Zdroje

Kategória:Unixové príkazy