Skip to main content

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

Internet Technologies - Computer Science for Business Leaders 2016 (Smět 2025)

Internet Technologies - Computer Science for Business Leaders 2016 (Smět 2025)
Anonim

Testovací příkaz lze použít na příkazovém řádku systému Linux, který porovnává jeden prvek s jiný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 - znamená, že se chystáte provést srovnání
  • 1 - Prvním prvkem, 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 proti
  • && - Spusťte následující příkaz, pokud je výsledek true
  • echo "yes" - Příkaz ke spuštění, pokud se porovnání vrátí true
  • || - Pokud je výsledek falešný, spusťte následující příkaz
  • echo "no" - Příkaz spustit, pokud porovnání vrátí hodnotu false

V podstatě je příkaz porovnán s hodnotou 1 až 2 a pokud se shodují, provede se příkazy "ano", které zobrazí "ano" a pokud neodpovídají, provede příkaz "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 prvky analyzované 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 -nt / 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

Zatím vše 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 částí je zde -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ď pravda, vygenerujte ř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 částí je zde -o, které znamená 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 ne.