Testovací príkaz sa môže použiť na príkazovom riadku Linuxu na porovnanie jedného elementu s iným, ale je bežnejšie používaný v skriptoch BASH shell ako súčasť podmienených vyhlásení, ktoré riadia logiku a programový tok.
Základný príklad
Tieto príkazy môžete vyskúšať jednoducho otvorením terminálového okna .
test 1 -eq 2 && echo "yes" || echo "nie"
Vyššie uvedený príkaz možno rozdeliť takto:
- test - to znamená, že sa chystáte vykonať porovnanie
- 1 - prvý prvok, ktorý budete porovnávať
- -eq (ako porovnávate, v tomto prípade testujete, či sa jedno číslo rovná inému)
- 2 - prvok, ktorý porovnávate prvý prvok znova
- && - spustite nasledujúce vyhlásenie, ak je výsledok pravdivý
- echo "yes" - príkaz na spustenie, ak sa porovnanie vráti true
- || - ak je výsledok nepravdivý, spustite nasledujúce vyhlásenie
- echo "no" - príkaz na spustenie, ak sa porovnanie vráti falošne
V podstate je príkaz porovnávaný s hodnotou 1 až 2 a súhlasí s príkazom "áno", ktorý zobrazuje "áno" a ak sa nezhodujú s výrazom "nie", ktorý zobrazuje "nie".
Porovnanie čísel
Ak porovnávate prvky, ktoré sa analyzujú ako čísla, môžete použiť nasledujúce porovnávacie operátory:
- -eq - má hodnotu 1 rovnakú hodnotu 2
- -ge - je hodnota 1 väčšia alebo rovná hodnote 2
- -gt - je hodnota 1 väčšia ako hodnota 2
- -le - je hodnota 1 menšia alebo rovná hodnote 2
- -lt - je hodnota 1 menšia ako hodnota 2
- -ne - hodnota 1 nie je rovnaká hodnota 2
Príklady:
test 1 -eq 2 && echo "yes" || echo "nie"
(zobrazuje "nie" na obrazovke, pretože 1 nie je 2)
test 1 -g 2 & & echo "yes" || echo "nie"
(zobrazí "nie" na obrazovke, pretože 1 nie je väčšie alebo rovná 2)
test 1 -gt 2 && echo "yes" || echo "nie"
(zobrazí "nie" na obrazovke, pretože 1 nie je väčšie ako 2)
test 1-o 2 && echo "áno" || echo "nie"
(zobrazuje obrazovku "áno", pretože 1 je menšie alebo rovné 2)
test 1 -lt 2 && echo "yes" || echo "nie"
(zobrazuje obrazovku "áno", pretože 1 je menšie alebo rovné 2)
test 1 -ne 2 && echo "áno" || echo "nie"
(zobrazí "áno" na obrazovke, pretože 1 nie je rovno 2)
Porovnanie textu
Ak porovnávate prvky, ktoré sa analyzujú ako reťazce, môžete použiť nasledujúce porovnávacie operátory:
- = - reťazec 1 sa zhoduje s reťazcom 2
- ! = - je reťazec 1 iný ako reťazec 2
- -n - je dĺžka reťazca väčšia ako 0
- -z - je dĺžka reťazca 0
Príklady:
test "reťazec1" = "reťazec2" && echo "áno" || echo "nie"
(zobrazí sa "nie" na obrazovke, pretože "string1" sa nerovná "string2")
test "reťazec1"! = "reťazec2" && echo "áno" || echo "nie"
(zobrazí "áno" na obrazovke, pretože "string1" sa nerovná "string2")
test -n "string1" && echo "áno" || echo "nie"
(zobrazí "áno" na obrazovke, pretože "string1" má dĺžku reťazca väčšiu ako nula)
test -z "string1" && echo "áno" || echo "nie"
(zobrazí "nie" na obrazovke, pretože "string1" má dĺžku reťazca väčšiu ako nula)
Porovnávanie súborov
Ak porovnávate súbory, môžete použiť nasledujúce porovnávacie operátory:
- -ef - majú súbory rovnaké číslo zariadenia a inode (sú to isté súbory)
- -nt - Je prvý súbor novší ako druhý súbor
- -ot - Je prvý súbor starší ako druhý súbor
- -b - Súbor existuje a je špeciálny blok
- -c - Súbor existuje a je špeciálny znak
- -d - Súbor existuje a je adresár
- -e - Súbor existuje
- -f - Súbor existuje a je bežný súbor
- -g - Súbor existuje a má určené číslo skupiny
- -G - Súbor existuje a vlastníka podľa skupiny používateľov
- -h - Súbor existuje a je symbolickým odkazom
- -k - Súbor existuje a jeho sticky bit je nastavený
- -L - Rovnako ako -h
- -O - Súbor existuje, že ste vlastníkom
- -p - Súbor existuje a je pomenovaný potrubie
- -r - Súbor existuje a je čitateľný
- -s - Súbor existuje a má veľkosť väčšiu ako nula
- -S - Súbor existuje a je zásuvka
- -t - Popisovač súborov sa otvorí na termináli
- -u - Súbor existuje a je nastavený bit set-user id
- -w - Súbor existuje a je zapisovateľný
- -x - Súbor existuje a je spustiteľný
Príklady:
test / cesta / do / súbor1 -n / cesta / do / súbor2 && echo "áno"
(Ak je súbor 1 novší ako súbor2, zobrazí sa slovo "yes")
test -e / path / to / file1 & & echo "áno"
(ak existuje súbor1, zobrazí sa slovo "áno")
test -O / cesta / do / súbor1 & & echo "áno"
(ak vlastníte súbor 1, zobrazí sa slovo "áno")
terminológie
- Blok špeciálny - súbor je blokové zariadenie, čo znamená, že údaje sa čítajú v blokoch bajtov. Sú to všeobecne súbory zariadení, napríklad pevné disky.
- Zvláštny znak - Súbor sa spracováva ihneď po napísaní a je obyčajne také zariadenie, napríklad sériový port
Porovnanie viacerých podmienok
Tak doteraz všetko porovnáva jednu vec proti inej, ale čo, ak chcete porovnať dve podmienky.
Napríklad, ak má zviera 4 nohy a ide "moo", je to pravdepodobne krava. Jednoduchá kontrola na 4 nohy nezaručuje, že máte kravu, ale kontrolujete zvuk, ktorý určite robí.
Na overenie obidvoch podmienok naraz použite nasledovné vyhlásenie:
test 4 -eq 4 -a "moo" = "moo" && echo "to je krava" || echo "to nie je krava"
Kľúčovou časťou je hodnota -a, ktorá znamená a.
Existuje lepší a bežnejší spôsob vykonávania rovnakého testu a to je nasledovné:
test 4 -eq 4 && test "moo" = "moo" && echo "to je krava" || echo "to nie je krava"
Ďalším testom, ktorý by ste chceli urobiť, je porovnanie dvoch vyhlásení a ak je buď pravdivý výstup reťazec. Napríklad, ak chcete skontrolovať, či súbor s názvom "file1.txt" existuje alebo súbor s názvom "file1.doc", môžete použiť nasledujúci príkaz
test -e file1.txt -o -e file1.doc && echo "súbor1 existuje" || echo "file1 neexistuje"
Kľúčovou časťou je -o, ktorá označuje alebo.
Existuje lepší a bežnejší spôsob vykonávania rovnakého testu a to je nasledovné:
test -e file1.txt || test -e file1.doc && echo "súbor1 existuje" || echo "file1 neexistuje"
Odstraňovanie kľúčového slova testu
V skutočnosti nepotrebujete použiť test slov na porovnanie. Jediné, čo musíte urobiť, je priložiť vyhlásenie do hranatých zátvoriek nasledovne:
[-e súbor1.txt] && echo "súbor1 existuje" || echo "file1 neexistuje"
[A] v podstate znamená to isté ako test.
Teraz viete, že môžete vylepšiť porovnanie viacerých podmienok takto:
[4 -eq 4] && ["moo" = "moo"] & & echo "to je krava" || echo "to nie je krava"
[-e file1.txt] || [-e súbor1.doc] && echo "súbor1 existuje" || echo "file1 neexistuje"
zhrnutie
Skúšobný príkaz je užitočnejší v skriptoch, pretože môžete otestovať hodnotu jednej premennej voči inej premennej a riadiť tok programu. Na štandardnom príkazovom riadku ho môžete použiť na overenie, či súbor existuje, alebo