Komanda testa se može koristiti u komandnoj liniji Linuxa da bi upoređivala jedan element protiv drugog, ali se najčešće koristi u BASH shell skriptama kao dio uslovnih izjava koje kontrolišu logiku i protok programa.
Osnovni primer
Možete probati ove komande jednostavno otvaranjem prozora terminala .
test 1-eq 2 && echo "da" || eho "ne"
Gornja komanda može se razvrstati na sledeći način:
- test - ovo znači da ćete napraviti upoređivanje
- 1 - prvi element koji ćete uporediti
- -eq (kako upoređujete, u ovom slučaju, testirate da li je jedan broj jednak drugom)
- 2 - element koji ponovo upoređujete prvi element
- && - pokrenite sledeću izjavu ako je rezultat istinit
- echo "da" - komanda za pokretanje ako se usporedba vraća true
- || - pokrenite sledeću izjavu ako je rezultat lažan
- echo "no" - komanda za pokretanje ako se poređenje podnosi neispravno
U suštini, komanda se upoređuje od 1 do 2 i one se podudaraju sa echo izvodi se "da" izjava koja prikazuje "da" i ako se ne podudaraju sa echo "ne" izjava se izvršava koja prikazuje "ne".
Upoređivanje brojeva
Ako upoređujete elemente koji se razmatraju kao brojevi, možete koristiti sledeće operatere upoređivanja:
- -eq - vrijedi 1 jednaku vrijednost 2
- -ge - vrijednost 1 je veća ili jednaka vrijednosti 2
- -gt - vrednost 1 je veća od vrednosti 2
- -le - vrednost 1 je manja ili jednaka vrednosti 2
- -lt - vrijednost 1 je manja od vrijednosti 2
- -ne - vrijednost 1 nije jednaka vrijednost 2
Primjeri:
test 1-eq 2 && echo "da" || eho "ne"
(prikazuje se "ne" na ekranu jer 1 ne odgovara 2)
test 1 -ge 2 && echo "da" || eho "ne"
(prikazuje "ne" na ekranu jer 1 nije veći ili jednak 2)
test 1 -gt 2 && echo "da" || eho "ne"
(prikazuje se "ne" na ekranu jer 1 nije veći od 2)
test 1 -le 2 && echo "da" || eho "ne"
(prikazuje "da" na ekranu jer je 1 manji ili jednak 2)
test 1 -lt 2 && echo "da" || eho "ne"
(prikazuje "da" na ekranu jer je 1 manji ili jednak 2)
test 1 -ne 2 && echo "da" || eho "ne"
(prikazuje "da" na ekran jer 1 nije jednako 2)
Upoređivanje teksta
Ako upoređujete elemente koji razdvajaju nizove, možete koristiti sledeće operatere poređenja:
- = - čini string 1 u nizu 2
- ! = - je string 1 različit za niz 2
- -n - je dužina niza veća od 0
- -z - je dužina strune 0
Primjeri:
test "string1" = "string2" && echo "da" || eho "ne"
(prikazuje "ne" na ekranu jer "string1" nije jednak "string2")
test "string1"! = "string2" && echo "da" || eho "ne"
(prikazuje "da" na ekran jer "string1" nije jednak "string2")
test -n "string1" && echo "da" || eho "ne"
(prikazuje "da" na ekran jer "string1" ima dužinu niza veću od nule)
test -z "string1" && echo "da" || eho "ne"
(prikazuje "ne" na ekranu jer "string1" ima dužinu niza veću od nule)
Upoređivanje datoteka
Ako upoređujete datoteke, možete koristiti sledeće operatere poređenja:
- -ef - Da li datoteke imaju isti broj uređaja i inode (da li su isti fajl)
- -nt - Da li je prva datoteka novija od druge datoteke
- -ot - Da li je prva datoteka starija od druge datoteke
- -b - datoteka postoji i blokirana je posebnom
- -c - Datoteka postoji i karakter je poseban
- -d - datoteka postoji i direktorijum
- -e - datoteka postoji
- -f - Datoteka postoji i redovna je datoteka
- -g - datoteka postoji i ima određeni broj grupe
- -G - Datoteka postoji i vlasnik je korisnička grupa
- -h - Datoteka postoji i predstavlja simboličnu vezu
- -k - Datoteka postoji i ima svoj lepljivi bit
- -L - Isto kao i -H
- -O - Datoteka postoji da ste vlasnik
- -p - Datoteka postoji i naziva je cijev
- -r - Datoteka postoji i može se čitati
- -s - Datoteka postoji i ima veličinu veću od nule
- -S - Datoteka postoji i predstavlja utičnicu
- -t - Deskriptor datoteke se otvara na terminalu
- -u - Datoteka postoji i bit set-user-id je podešen
- -w - Datoteka postoji i može se pisati
- -x - Datoteka postoji i može se izvršiti
Primjeri:
test / putanje / do / file1 -n / path / to / file2 && echo "da"
(Ako je datoteka1 novija od fajla2 onda će se prikazati riječ "da"),
test -e / putanje / do / file1 && echo "da"
(ako postoji datoteka1, prikazaće se riječ "da")
test -O / path / do / file1 && echo "da"
(ako posedujete datoteku1, onda se prikaže riječ "da")
Terminologija
- Block special - Datoteka je blok uređaj, što znači da se podaci čitaju u blokovima bajtova. Ovo su uglavnom datoteke uređaja kao što su čvrsti diskovi.
- Poseban karakter - Datoteka se aktivira odmah kada pišete na njega i najčešće je uređaj kao što je serijski port
Upoređivanje višestrukih uslova
Do sada je sve upoređivalo jednu stvar sa drugom, ali šta ako želite da uporedite dva uslova.
Na primer, ako životinja ima 4 noge i ide "moo" verovatno je krava. Jednostavno provera 4 noge ne garantuje da imate kravu, ali proveravate zvuk koji sigurno radi.
Da biste testirali oba stanja, upotrebite sledeću izjavu:
test 4 -eq 4 -a "moo" = "moo" && echo "to je krava" || echo "to nije krava"
Ključni deo ovde je -a koja se zalaže i.
Postoji bolji i najčešće korišćeni način izvršenja istog testa i to je sledeće:
test 4 -eq 4 && test "moo" = "moo" && echo "to je krava" || echo "to nije krava"
Još jedan test koji želite da uradite je upoređivanje dve izjave i ako je istina izvoditi niz. Na primer, ako želite da proverite da li postoji datoteka sa imenom "file1.txt" ili postoji datoteka pod nazivom "file1.doc", možete koristiti sljedeću naredbu
test -e file1.txt -o -e file1.doc && echo "file1 exists" || echo "datoteka1 ne postoji"
Ključni deo ovde je -o što se odnosi na ili.
Postoji bolji i najčešće korišćeni način izvršenja istog testa i to je sledeće:
test -e file1.txt || test-e file1.doc && echo "file1 exists" || echo "datoteka1 ne postoji"
Eliminisanje test ključne reči
Zaista ne morate koristiti riječ test za izvršavanje poređenja. Sve što treba da uradite je da priložite izjavu u kvadratnim zagradama kako slijedi:
[-e file1.txt] && echo "datoteka1 postoji" || echo "datoteka1 ne postoji"
[I] u osnovi znači isto kao i test.
Sada znate da možete poboljšati upoređivanje više uslova na sledeći način:
[4 -eq 4] && ["moo" = "moo"] && echo "to je krava" || echo "to nije krava"
[-e file1.txt] || [-e file1.doc] && echo "datoteka1 postoji" || echo "datoteka1 ne postoji"
Sažetak
Komanda testa je korisnija u skriptama zato što možete testirati vrednost jedne promenljive u odnosu na drugi i kontrolni protok programa. Na standardnoj komandnoj liniji, možete ga koristiti da biste testirali da li postoji datoteka ili