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 preizkušate, ali je ena številka enaka drugi)
- 2 - element, s katerim ponovno primerjate prvi element
- && - zaženite naslednjo izjavo, če je rezultat resničen
- echo "yes" - ukaz za zagon, če primerjava vrne resnično
- || - izvedite naslednjo izjavo, če je rezultat napačen
- echo "no" - ukaz za zagon, če se primerjava vrne false
V bistvu je ukaz primerjal 1 do 2 in se ujemajo z odzivom echo "yes" izjavo, ki prikaže "da", in če se ne ujemajo z izjavo "ne", se izvede, ki prikazuje "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 obravnavamo 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 -n / 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, a kaj, če želite primerjati dva pogoja.
Na primer, če ima žival štiri noge in gre "moo", je verjetno krava. Preprosto preverjanje za 4 noge ne zagotavlja, da imate krav, ampak preverite zvok, ki ga zagotovo počne.
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 tukaj je -a, ki stoji za 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 resnično izpisajte niz. Če na primer želite preveriti, ali obstaja datoteka, imenovana "file1.txt", ali obstaja datoteka, imenovana "file1.doc", lahko uporabite naslednji ukaz
test-e file1.txt -o -e file1.doc && echo "datoteka1 obstaja" || echo "file1 ne obstaja"
Ključni del je -o, ki pomeni 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 ga lahko uporabite za preverjanje, ali obstaja datoteka ali