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:
- test - to znamená, že se chystáte provést srovnání
- 1 - první prvek, který budete porovnávat
- -eq (jak porovnáváte, v tomto případě testujete, zda se jedno číslo rovná jinému číslu)
- 2 - prvek, který srovnáváte první prvek znovu
- && - spusťte následující příkaz, pokud je výsledek true
- echo "ano" - příkaz spustit, pokud porovnání vrátí hodnotu true
- || - spusťte následující příkaz, pokud je výsledek falešný
- echo "no" - příkaz spustit, pokud porovnání vrátí false
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í:
- -eq - má hodnotu 1 stejnou hodnotu 2
- -ge - je hodnota 1 větší nebo rovná hodnotě 2
- -gt - je hodnota 1 větší než hodnota 2
- -le - je hodnota 1 menší nebo rovna hodnotě 2
- -lt - je hodnota 1 menší než hodnota 2
- -ne - hodnota 1 není stejná hodnota 2
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:
- = - řetězec 1 odpovídá řetězci 2
- ! = - je řetězec 1 odlišný od řetězce 2
- -n - je délka řetězce větší než 0
- -z - je délka řetězce 0
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í:
- -ef - mají soubory stejné číslo zařízení a inode (jsou to stejné soubory)
- -nt - Je první soubor novější než druhý soubor
- -ot - Je první soubor starší než druhý soubor
- -b - Soubor existuje a je speciální
- -c - Soubor existuje a je zvláštní znak
- -d - Soubor existuje a je adresář
- -e - Soubor existuje
- -f - Soubor existuje a je běžným souborem
- -g - Soubor existuje a má zadané číslo skupiny
- -G - Soubor existuje a vlastník podle skupiny uživatelů
- -h - Soubor existuje a je symbolickým odkazem
- -k - Soubor existuje a jeho sticky bit je nastaven
- -L - Stejné jako -h
- -O - Soubor existuje, jste vlastník
- -p - Soubor existuje a je pojmenované
- -r - Soubor existuje a je čitelný
- -s - Soubor existuje a má velikost větší než nula
- -S - Soubor existuje a je zásuvka
- -t - Popisovač souborů je otevřen na terminálu
- -u - Soubor existuje a je nastaven bit pro set-user-id
- -w - Soubor existuje a je zapisovatelný
- -x - Soubor existuje a je spustitelný
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
- Speciální blok - soubor je blokové zařízení, což znamená, že data jsou čteny v blocích bajtů. Jedná se obecně o soubory zařízení, jako jsou pevné disky.
- Zvláštní znak - Soubor je okamžitě spuštěn, když do něj zapíšete a běžně se jedná o zařízení, jako je například sériový port
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