Skip to main content

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

Anonim

Testovací príkaz sa môže použiť na príkazovom riadku systému Linux na porovnanie jedného elementu s iným, ale je bežnejšie používaný v skriptoch shell BASH 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 proti
  • && - Spustite nasledujúce vyhlásenie, ak je výsledok pravdivý
  • echo "yes" - príkaz na spustenie, ak sa porovnanie vráti true
  • || - Ak výsledok nie je správny, spustite nasledujúci príkaz
  • echo "no" - príkaz na spustenie, ak sa porovnanie vráti falošne

Príkaz v podstate porovnáva 1 až 2 a ak sa zhodujú, vykoná sa príkaz "yes", ktorý zobrazí "yes" a ak sa nezhoduje, vykoná sa príkaz "no", ktorý zobrazí "no".

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 -nt / 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

Zatiaľ všetko porovnáva jednu vec proti druhej, 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 kontroluje 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 tu -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ší test, ktorý by ste mohli chcieť urobiť, je porovnanie dvoch vyhlásení a ak je pravdivý, zadajte reťazec. Napríklad, ak chcete skontrolovať, či existuje súbor s názvom "file1.txt" 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", čo znamená 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"

Odstránenie 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 môžete použiť na overenie, či súbor existuje alebo nie.