Skip to main content

Kako uporabljati testne pogoje znotraj scenarija Bash

Anonim

Preizkusni ukaz lahko uporabite v ukazni vrstici Linux, da primerjate en element proti drugemu, vendar ga bolj pogosto uporabljate v skriptih BASH kot del pogojnih izjav, ki nadzorujejo logiko in pretok programa.

Osnovni primer

Te ukaze lahko poskusite preprosto tako, da odprete terminalsko okno.

test 1 -eq 2 && echo "da" || echo "ne"

Zgornji ukaz lahko razčlenite na naslednji način:

  • test - to pomeni, da boste izvedli primerjavo
  • 1 - Prvi element, ki ga boste primerjali
  • -eq - Kako primerjate. V tem primeru preskušate, ali je ena številka enaka drugi.
  • 2 - Element, s katerim primerjate prvi element proti
  • && - Zaženite naslednjo izjavo, če je rezultat resničen
  • echo "yes" - ukaz za zagon, če primerjava vrne resnično
  • || - Če je rezultat napačen, zaženite naslednjo izjavo
  • echo "no" - ukaz za zagon, če se primerjava vrne false

V bistvu je ukaz primerjal 1 do 2 in če se ujemajo, se izvede echo "da" izjava, ki prikaže "da" in če se ne ujemata, se izvede izjava "ne", ki prikaže "ne".

Primerjava številk

Če primerjate elemente, ki jih lahko razčlenite kot številke, lahko uporabite naslednje operaterje primerjave:

  • -eq - vrednost 1 enako vrednost 2
  • -ge - vrednost 1 je večja ali enaka vrednosti 2
  • -gt - vrednost 1 je večja od vrednosti 2
  • -le - vrednost 1 je manjša ali enaka vrednosti 2
  • -lt - vrednost 1 je manjša od vrednosti 2
  • -ne - vrednost 1 ni enaka 2

Primeri

test 1 -eq 2 && echo "da" || echo "ne"

(na zaslonu se prikaže "ne", ker 1 ne ustreza 2)

test 1 -ge 2 && echo "da" || echo "ne"

(na zaslonu se prikaže "ne", ker 1 ni več ali enak 2)

test 1 -gt 2 && echo "da" || echo "ne"

(na zaslonu se prikaže "ne", ker 1 ni več kot 2)

test 1 -le 2 && echo "da" || echo "ne"

(prikaže zaslon »da« na zaslonu, ker je 1 manjši ali enak 2)

test 1 -lt 2 && echo "da" || echo "ne"

(prikaže zaslon »da« na zaslonu, ker je 1 manjši ali enak 2)

test 1 -ne 2 && echo "da" || echo "ne"

(prikaže zaslon »da« na zaslonu, ker 1 ni enak 2)

Primerjanje besedila

Če primerjate elemente, ki jih razčleni kot nizov, lahko uporabite naslednje operaterje primerjave:

  • = - niza 1 ujemajočega niza 2
  • ! = - je niz 1, ki se razlikuje od niza 2
  • -n - je dolžina niza večja od 0
  • -z - je dolžina niza 0

Primeri

test "string1" = "string2" && echo "da" || echo "ne"

(na zaslonu se prikaže "ne", ker "string1" ne ustreza "string2")

test "string1"! = "string2" && echo "da" || echo "ne"

(prikaže "da" na zaslonu, ker "string1" ne ustreza "string2")

test -n "string1" && echo "da" || echo "ne"

(na zaslonu se prikaže "da", ker ima "string1" dolžino niza, ki je večja od nič)

test -z "string1" && echo "da" || echo "ne"

(na zaslonu se prikaže "ne", ker ima "string1" dolžino niza, ki je večja od nič)

Primerjanje datotek

Če primerjate datoteke, lahko uporabite naslednje operaterje primerjave:

  • -ef - Ali imajo datoteke enake številke naprave in inode (ali so ista datoteka)
  • -nt - Ali je prva datoteka novejša od druge datoteke
  • -ot - Je prva datoteka starejša od druge datoteke
  • -b - datoteka obstaja in je blokirana posebna
  • -c - datoteka obstaja in je poseben znak
  • -d - Datoteka obstaja in je mapa
  • -e - Datoteka obstaja
  • -f - Datoteka obstaja in je redna datoteka
  • -g - Datoteka obstaja in ima določeno številko skupine
  • -G - Datoteka obstaja in lastnik skupine uporabnikov
  • -h - datoteka obstaja in je simbolna povezava
  • -k - Datoteka obstaja in ima svoj lepljiv bit
  • -L - Enako kot -H
  • -O - ​​Datoteka obstaja, da ste lastnik
  • -p - Datoteka obstaja in je poimenovana cev
  • -r - Datoteka obstaja in je berljiva
  • -s - datoteka obstaja in ima velikost večjo od nič
  • -S - datoteka obstaja in je vtičnica
  • -t - Deskriptor datoteke se odpre na terminalu
  • -u - Datoteka obstaja in nastavljen je bit set-user-id
  • -w - Datoteka obstaja in je mogoče zapisati
  • -x - datoteka obstaja in je izvedljiva

Primeri

test / pot / do / file1 -nt / path / do / file2 && echo "da"

(Če je datoteka1 novejša od datoteke2, se prikaže beseda "da")

test -e / path / do / file1 && echo "da"

(če obstaja datoteka1, se prikaže beseda "da")

test -O / path / do / file1 && echo "da"

(če imate datoteko1, se prikaže beseda "da")

Terminologija

  • Block special - Datoteka je blokovna naprava, kar pomeni, da se podatki berejo v blokih bajtov. To so običajno datoteke naprav, kot so trdi diski.
  • Posebnost znakov - Datoteka deluje takoj, ko jo napišete in je običajno naprava, kot je serijska vrata

Primerjava več pogojev

Do zdaj je vse primerjalo eno stvar z drugo, kaj pa če želite primerjati dva pogoja?

Na primer, če ima žival 4 noge in gre "moo", je verjetno krava. Preprosto preverjanje za 4 noge ne zagotavlja, da imate kravo, ampak preverite zvok, ki ga zagotovo naredi.

Za preizkus obeh pogojev hkrati uporabite naslednjo izjavo:

test 4 -eq 4 -a "moo" = "moo" && echo "to je krava" || echo "ni krava"

Ključni del je -a, ki se zavzema in .

Obstaja boljši in bolj pogosto uporabljen način izvajanja istega testa, in sicer:

test 4 -eq 4 && test "moo" = "moo" && echo "to je krava" || echo "ni krava"

Še en test, ki ga boste morda želeli, je primerjava dveh izjav in če je bodisi res, izpustite niz. Na primer, če želite preveriti, ali obstaja datoteka, imenovana "file1.txt", ali obstaja datoteka, imenovana "file1.doc", lahko uporabite ta ukaz:

test-e file1.txt -o -e file1.doc && echo "datoteka1 obstaja" || echo "file1 ne obstaja"

Ključni del je -o, ki se zavzema ali .

Obstaja boljši in bolj pogosto uporabljen način izvajanja istega testa, in sicer:

test-e file1.txt || test-e file1.doc && echo "datoteka1 obstaja" || echo "file1 ne obstaja"

Odpravljanje testne ključne besede

Za primerjavo dejansko ne potrebujete besednega testa. Vse, kar morate storiti, je, da izjavo v oglatih oklepajih zapišete na naslednji način:

-e file1.txt && echo "datoteka1 obstaja" || echo "file1 ne obstaja"

In v bistvu pomeni enako kot test.

Zdaj veste, da to lahko izboljšate pri primerjavi več pogojev, kot sledi:

4 -eq 4 && "moo" = "moo" && echo "to je krava" || echo "ni krava"-e datoteka1.txt || -e file1.doc && echo "datoteka1 obstaja" || echo "file1 ne obstaja"

Povzetek

Preskusni ukaz je bolj uporaben v skriptah, saj lahko preizkusite vrednost ene spremenljivke v drugem in krmilnem toku programa. V standardni ukazni vrstici jo lahko uporabite za preverjanje, ali datoteka obstaja ali ne.