Ako používať testovacie podmienky v rámci skriptu Bash

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:

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:

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:

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:

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

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