**`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 `[ vyraz ]`, 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.[chýba zdroj]

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

1. ↑   *Linux test Command Tutorial for Beginners (with Examples)* [online]. HowtoForge, [cit. 2023-09-15]. Dostupné online. (po anglicky)
2. ↑   *Linux Test Command Information and Examples* [online]. www.computerhope.com, [cit. 2023-09-15]. Dostupné online. (po anglicky)
3. 1 2 3 4 5   *test Man Page - Linux - SS64.com* [online]. ss64.com, [cit. 2023-09-15]. Dostupné online.
4. ↑   *ksh88 - man pages section 1: User Commands* [online]. docs.oracle.com, [cit. 2023-09-15]. Dostupné online.
5. ↑  test(1) — coreutils — Debian buster — Debian Manpages
6. ↑   *Native Win32 ports of some GNU utilities* [online].. Dostupné online.
7. ↑  IBM. *IBM System i Version 7.2 Programming Qshell* [online].. Dostupné online. (po anglicky)
8. ↑   *test man page* [online]. linuxcommand.org, [cit. 2023-09-15]. Dostupné online.

Zdroje
------

*Tento článok je čiastočný alebo úplný preklad článkov test (Unix) na českej Wikipédii a test (Unix) na anglickej Wikipédii.*

| * z
* d
* u
Príkazy a programy príkazového riadku Unixu |
| --- |
| Správa súborov | cat • chattr • cd • chmod • chown • chgrp • cksum • cmp • cp • du • df • file • fsck • fuser • ln • ls • lsattr • lsof • mkdir • mount • mv • pwd • rm • rmdir • split • touch |
| Správa procesov | at • chroot • crontab • exit • kill • killall • nice • pgrep • pidof • pkill • ps • pstree • sleep • time • top • wait • watch |
| Správa užívateľov a prostredia | env • finger • id • logname • mesg • passwd • su • sudo • uname • uptime • w • wall • who • whoami • write |
| Spracovanie textu | awk • comm • cut • diff • ed • ex • fmt • head • iconv • join • less • more • patch • paste • sed • sort • tac • tail • tr • uniq • wc • xargs |
| Programovanie v shelle | alias • basename • echo • expr • false • printf • test • true • unset |
| Sieťová komunikácia | dig • inetd • host • ifconfig • netstat • nslookup • ping • rlogin • nc • traceroute |
| Hľadanie | find •  grep • strings |
| Ostatné | banner • bc • cal • dd • lp • man • size • yes |