Testna naredba može se koristiti na Linux komandnoj liniji za usporedbu jednog elementa protiv drugog, ali se uobičajeno koristi u skriptama BASH skripte kao dio uvjetnih izjava koje kontroliraju logiku i tok programa.
Osnovni primjer
Te naredbe možete isprobati jednostavnim otvaranjem prozora terminala .
test 1-eq 2 && echo "yes" || odjek "ne"
Gornja naredba može se podijeliti na sljedeći način:
- test - to znači da ćete napraviti usporedbu
- 1 - prvi element koji ćete usporediti
- -eq (kako uspoređujete, u ovom slučaju testirate je li jedan broj jednak broju)
- 2 - element koji uspoređujete prvi element
- && - pokrenite sljedeću izjavu ako je rezultat istinit
- echo "yes" - naredba za pokretanje ako se usporedba vraća istinito
- || - pokrenite sljedeću izjavu ako je rezultat lažan
- eho "ne" - naredba za pokretanje ako se usporedba vraća neistinito
U biti, naredba uspoređuje 1 do 2 i odgovara echo "yes" izjava koja se prikazuje "yes" i ako ne odgovara echo "no" izjava je izvršena koja prikazuje "ne".
Usporedba brojeva
Ako uspoređujete elemente koji se raščlanjuju kao brojevi, možete upotrijebiti sljedeće operatore usporedbe:
- - eq - vrijednost 1 jednaka vrijednost 2
- -ge - je vrijednost 1 veća ili jednaka vrijednosti 2
- -gt - je vrijednost 1 veća od vrijednosti 2
- -le - je vrijednost 1 manja ili jednaka vrijednosti 2
- -lt - vrijednost 1 je manja od vrijednosti 2
- -ne - vrijednost 1 nije jednaka vrijednost 2
Primjeri:
test 1-eq 2 && echo "yes" || odjek "ne"
(prikazuje "ne" na zaslonu jer 1 nije jednak 2)
test 1 -ge 2 & & echo "yes" || odjek "ne"
(prikazuje "ne" na zaslonu jer 1 nije veća ili jednaka 2)
test 1 -gt 2 && echo "yes" || odjek "ne"
(prikazuje "ne" na zaslonu jer 1 nije veći od 2)
test 1 -le 2 && echo "yes" || odjek "ne"
(prikazuje "da" na zaslon jer je 1 manji ili jednak 2)
test 1 -lt 2 && echo "yes" || odjek "ne"
(prikazuje "da" na zaslon jer je 1 manji ili jednak 2)
test 1 -ne 2 && echo "da" || odjek "ne"
(prikazuje "da" na zaslonu jer 1 nije jednak 2)
Uspoređujući tekst
Ako uspoređujete elemente koji se analiziraju kao nizovi, možete upotrijebiti sljedeće operatore usporedbe:
- = - označava niz 1 niz odgovara 2
- ! = - je niz 1 različit od stringa 2
- -n - duljina niza je veća od 0
- -z - je duljina niza 0
Primjeri:
test "string1" = "string2" && echo "yes" || odjek "ne"
(prikazuje "ne" na zaslonu jer "string1" nije jednak "string2")
test "string1"! = "string2" && echo "yes" || odjek "ne"
(prikazuje "da" na zaslonu jer "string1" nije jednak "string2")
test -n "string1" && echo "yes" || odjek "ne"
(prikazuje "da" na zaslonu jer "string1" ima duljinu niza veću od nule)
test -z "string1" && echo "da" || odjek "ne"
(prikazuje "ne" na zaslonu jer "string1" ima duljinu niza veću od nule)
Usporedba datoteka
Ako uspoređujete datoteke, možete koristiti sljedeće operatore usporedbe:
- -ef - Da li datoteke imaju isti uređaj i brojeve inoda (jesu li iste datoteke)
- -nt - Je li prva datoteka novije od druge datoteke
- - je li prva datoteka starija od druge datoteke
- -b - Datoteka postoji i blok je posebna
- -c - Datoteka postoji i znak je posebna
- -d - Datoteka postoji i je direktorij
- -e - Datoteka postoji
- -f - Datoteka postoji i redovna je datoteka
- -g - Datoteka postoji i ima navedeni broj grupe
- -G - Datoteka postoji i vlasnik je grupe korisnika
- -h - Datoteka postoji i simbolična je veza
- -k - Datoteka postoji i ima svoj sticky bit set
- -L - isto kao i -h
- -O - Datoteka postoji da ste vlasnik
- -p - Datoteka postoji i nazvana je cijev
- -r - Datoteka postoji i čitljiva je
- -s - Datoteka postoji i ima veličinu veću od nule
- -S - Datoteka postoji i jest utičnica
- -t - Deskriptor datoteka otvara se na terminalu
- -u - Datoteka postoji i set-user-id bit je postavljen
- -w - Datoteka postoji i može se pisati
- -x - Datoteka postoji i izvršna je
Primjeri:
test / put / to / file1 -n / put / do / file2 & & echo "da"
(Ako je file1 noviji od datoteke2, tada će se prikazati riječ "da"
test -e / put / do / file1 && echo "da"
(ako postoji datoteka1, pojavit će se riječ "da")
test -O / put / do / file1 && echo "da"
(ako posjedujete datoteku1 onda se prikazuje riječ "da")
Terminologija
- Posebni blok - datoteka je blokni uređaj, što znači da se podaci čita u blokovima bajtova. To su uglavnom datoteke uređaja kao što su tvrdi diskovi.
- Posebna osobina - Datoteka se ponaša odmah kada pišete na njega i obično je uređaj poput serijskog priključka
Usporedba višestrukih uvjeta
Do sada je sve usporedilo jednu stvar s drugom, ali što ako želite usporediti dva uvjeta.
Na primjer, ako životinja ima 4 noge i "moo", to je vjerojatno krava. Jednostavno provjeravanje za 4 noge ne jamči da imate krava, ali provjerite zvuk koji čini sigurno radi.
Za testiranje oba uvjeta odjednom upotrijebite sljedeću izjavu:
test 4-eq 4 -a "moo" = "moo" && echo "to je krava" || odjek "to nije krava"
Ovdje je ključni dio -a koji označava i.
Postoji bolji i najčešće korišten način izvođenja istog testa i to je kako slijedi:
test 4-eq 4 && test "moo" = "moo" && echo "to je krava" || odjek "to nije krava"
Drugi test koji biste trebali napraviti jest uspoređivanje dviju izjava i ako je istina izlazni niz. Na primjer, ako želite provjeriti postoji li datoteka pod nazivom "file1.txt" ili postoji datoteka nazvana "file1.doc", možete upotrijebiti sljedeću naredbu
test -e file1.txt -o -e file1.doc & & echo "file1 postoji" || echo "datoteka1 ne postoji"
Ključni dio ovdje je -o koji označava ili.
Postoji bolji i najčešće korišten način izvođenja istog testa i to je kako slijedi:
test -e file1.txt || test -e file1.doc & & echo "file1 postoji" || echo "datoteka1 ne postoji"
Uklanjanje testne ključne riječi
Zapravo ne morate koristiti riječ test za izvršavanje usporedbe. Sve što morate učiniti je priložiti izjavu u kvadratnim zagradama kako slijedi:
[-e file1.txt] && echo "file1 postoji" || echo "datoteka1 ne postoji"
[I] zapravo znači isto kao i test.
Sada znate ovo što možete poboljšati ako uspoređujete više uvjeta kako slijedi:
[4-eq 4] && ["moo" = "moo"] && echo "to je krava" || odjek "to nije krava"
[-e file1.txt] || [-e file1.doc] && echo "file1 postoji" || echo "datoteka1 ne postoji"
Sažetak
Testna naredba je korisnija u skriptama jer možete testirati vrijednost jedne varijable protiv drugog i protoka upravljačkog programa. Na standardnoj naredbenoj liniji možete ga koristiti za testiranje postoji li datoteka ili