Jak používat testovací podmínky v rámci skriptu Bash

Testovací příkaz lze použít na příkazovém řádku systému Linux pro porovnání jednoho prvku s druhým, ale je běžněji používán v shell skriptů BASH jako součást podmíněných příkazů, které řídí logiku a programový tok.

Základní příklad

Tyto příkazy můžete vyzkoušet jednoduše otevřením terminálového okna .

test 1 -eq 2 && echo "yes" || echo "no"

Výše uvedený příkaz může být rozdělen takto:

V podstatě je příkaz porovnán s hodnotou 1 až 2 a odpovídá příkazu "ano", který zobrazuje "ano" a pokud neodpovídá příkazu "ne", který zobrazí "ne".

Srovnání čísel

Pokud porovnáváte prvky, které se vyskytují jako čísla, můžete použít následující operátory porovnávání:

Příklady:

test 1 -eq 2 && echo "yes" || echo "no"

(zobrazí se "ne" na obrazovce, protože 1 se nerovná 2)

test 1 -kód 2 && echo "ano" || echo "no"

(zobrazí "ne" na obrazovce, protože 1 není větší nebo rovno 2)

test 1 -gt 2 && echo "ano" || echo "no"

(zobrazí "ne" na obrazovce, protože 1 není větší než 2)

test 1 -le2 && echo "ano" || echo "no"

(zobrazí "ano" na obrazovce, protože 1 je menší nebo rovno 2)

test 1 -lt 2 && echo "ano" || echo "no"

(zobrazí "ano" na obrazovce, protože 1 je menší nebo rovno 2)

test 1 -ne 2 && echo "ano" || echo "no"

(zobrazí "ano" na obrazovce, protože 1 není rovno 2)

Srovnání textu

Pokud porovnáváte elementy, které jsou analyzovány jako řetězce, můžete použít následující porovnávací operátory:

Příklady:

test "string1" = "string2" && echo "ano" || echo "no"

(zobrazí "ne" na obrazovce, protože "string1" se nerovná "string2")

test "string1"! = "string2" && echo "ano" || echo "no"

(zobrazí "ano" na obrazovce, protože "string1" se nerovná "string2")

test -n "string1" && echo "ano" || echo "no"

(zobrazí "ano" na obrazovce, protože "string1" má délku řetězce větší než nula)

test -z "string1" && echo "ano" || echo "no"

(zobrazí "ne" na obrazovce, protože "string1" má délku řetězce větší než nula)

Srovnání souborů

Pokud porovnáváte soubory, můžete použít následující operátory porovnání:

Příklady:

test / cesta / do / souboru1 -n / cesta / do / souboru2 && echo "ano"

(Pokud je soubor1 novější než soubor2, zobrazí se slovo "ano")

test -e / path / to / file1 && echo "ano"

(pokud existuje soubor1, zobrazí se slovo "ano")

test -O / cesta / do / souboru1 & & echo "ano"

(pokud vlastníte soubor1, zobrazí se slovo "ano")

Terminologie

Porovnání více podmínek

Dosud všechno srovnává jednu věc proti druhé, ale co když chcete porovnat dvě podmínky.

Například, pokud zvíře má 4 nohy a jde "moo", je to pravděpodobně kráva. Jednoduchá kontrola na 4 nohy nezaručuje, že máte krávu, ale kontrolujete zvuk, který určitě dělá.

Chcete-li otestovat obě podmínky najednou, použijte následující příkaz:

test 4 -eq 4 -a "moo" = "moo" && echo "to je kráva" || echo "to není kráva"

Klíčovou součástí zde je -a, která znamená a.

Existuje lepší a běžnější způsob, jak provádět tentýž test, a to je následující:

test 4 -eq 4 && test "moo" = "moo" && echo "to je kráva" || echo "to není kráva"

Dalším testem, který byste chtěli udělat, je porovnání dvou příkazů a pokud je buď pravdivý výstup řetězec. Například pokud chcete zkontrolovat, zda existuje soubor s názvem "file1.txt" nebo soubor s názvem "file1.doc", můžete použít následující příkaz

test -e file1.txt -o -e file1.doc && echo "soubor1 existuje" || echo "soubor1 neexistuje"

Klíčovou součástí zde je -o, které označuje nebo.

Existuje lepší a běžnější způsob, jak provádět tentýž test, a to je následující:

test -e soubor1.txt || test -e file1.doc && echo "soubor1 existuje" || echo "soubor1 neexistuje"

Odstranění klíčového slova testu

Nemusíte skutečně použít slovo test pro provedení porovnání. Jediné, co musíte udělat, je přiložit příkaz v hranatých závorkách takto:

[-e soubor1.txt] && echo "soubor1 existuje" || echo "soubor1 neexistuje"

[A] v podstatě znamená to samé jako test.

Nyní víte, že můžete vylepšit porovnání několika podmínek takto:

[4 -eq 4] && ["moo" = "moo"] && echo "to je kráva" || echo "to není kráva"

[-e file1.txt] || [-e file1.doc] && echo "soubor1 existuje" || echo "soubor1 neexistuje"

souhrn

Testovací příkaz je užitečnější ve skriptech, protože můžete otestovat hodnotu jedné proměnné vůči jiné a řídit tok programu. Na standardním příkazovém řádku jej můžete použít k otestování, zda soubor existuje nebo