Příkaz test je naprosto zásadní pro psaní while cyklů a podmínek. Vyhodnotí jestli je jeho argument pravdivý nebo ne a podle toho zvolí návratovou hodnotu. Daleko častěji než přímo s příkazem test se setkáme s jeho variantou, kdy je výraz k vyhodnocení uzavřen do hranatých závorek [ ... ]. Závorky musí být od příkazu odděleny mezerou!
[ "$a" = "$b" ] ... true, když jsou řetězce stejné [ "$a" != "$b" ] ... true, když jsou řetězce různé [ $a -eq $b ] ... true, když je $a = $b (číselně) [ $a -ne $b ] ... true, když je $a ≠ rovno $b [ $a -gt $b ] ... true, když je $a > $b [ $a -ge $b ] ... true, když je $a ≥ $b [ $a -lt $b ] ... true, když je $a < $b [ $a -le $b ] ... true, když je $a ≤ $b [ -e "$file" ] ... soubor $file existuje [ -d "$file" ] ... soubor $file existuje a je adresář [ -f "$file" ] ... soubor $file existuje a je obyčejný soubor [ -n "$str" ] ... $str není prázdný řetězec [ -z "$str" ] ... $str je prázdný řetězec [ ! expr ] ... true, když je expr false [ expr1 -a expr2 ] ... true, když jsou expr1 i expr2 true [ expr1 -o expr2 ] ... true, když je expr1 nebo expr2 true
Můžeme také použít závorky () pro určení priorit.
if
if blok příkazů 1; then ... elif blok příkazů 2; then ... else ... fi
To, zda je podmínka splněna nebo ne závisí na návratové hodnotě posledního z příkazů v bloku příkazů 1. Větve elif a else lze pochopitelně vynechat. Podmínky bude ve většině případů reprezentovat příkaz test:
if [ $n -eq 1 ]; then echo "<th>$n</th>" else echo "<td>$n</td>" fi