Test (Unix)

test 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:

 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 

Unixové príkazy