A tesztkörülmények használata Bash-szkriptben
Az Linuxteszt parancs összehasonlítja az egyik elemet a másikkal, de gyakrabban használják BASH shell szkriptek részeként feltételes állítások amelyek a logikát és a programfolyamatot vezérlik.
Egy alapvető példa

Próbálja ki ezeket a parancsokat egy terminál ablak.
teszt 1 -eq 2 && echo "igen" || visszhang "nem"
A fenti parancs a következőképpen oszlik meg:
- teszt: Az összehasonlítás végrehajtására szolgáló parancs
- 1:Az első elem, amelyet összehasonlítani fog. Ebben a példában ez a szám 1 de lehet bármilyen szám, vagy egy karakterlánc az idézőjelekben.
- -ekv: Az összehasonlítás módszere. Ebben az esetben azt teszteli, hogy az egyik érték egyenlő-e a másikkal.
- 2: Az elem, amellyel az első elemet összehasonlítja. Ebben a példában ez a szám 2.
- &&: Linux parancsikon a parancsok egymáshoz láncolásához, egymás után. A tesztláncok kimenete a következő parancsokhoz. A kettős „és” jel akkor fut le, ha az őt megelőző parancs kilépési állapota 0, ami egy divatos módja annak, hogy azt mondjuk, hogy a parancs nem sikerült.
- visszhang "igen": Az összehasonlítás sikeressége esetén futtatandó parancs. Ebben az esetben csak annyit teszünk, hogy megkérdezzük a visszhang parancsot az "igen" szó kinyomtatásához a szabványos kimenetre, de itt bármilyen parancsot futtathat, amely végrehajtódik, ha a teszt eredménye igaznak bizonyul.
- ||: A &&; a double-pipe csak akkor fut le, ha az azt megelőző parancs meghiúsul (a kilépési állapota nem 0).
- visszhang "nem": Az összehasonlítás sikertelensége esetén futtatandó parancs.
Fuss egy shell-parancsból, teszt nem ad vissza értéket a standard kimenethez, csupán egy kilépési állapot kódot ad vissza. Ezért van szükség egy visszhangparancs láncolására.

Lényegében a parancs összehasonlítja az 1-et a 2-vel, és ha egyezik, akkor a echo "yes" utasítás végrehajtásra kerül. amely "igen"-t jelenít meg, és ha nem egyeznek, akkor a echo "no" utasítás végrehajtásra kerül, amely megjeleníti "nem."
Számok összehasonlítása
Ha számként értelmezett elemeket hasonlít össze, használhatja a következő összehasonlító operátorokat:
- -eq: az 1. érték egyenlő a 2. értékkel
- -ge: az 1-es érték nagyobb vagy egyenlő a 2-es értékkel
- -gt: az 1. érték nagyobb, mint a 2. érték
- -le: 1 érték kisebb vagy egyenlő, mint 2
- -lt: 1 értékkel kisebb, mint 2
- -ne: az 1. érték nem egyenlő a 2. értékkel
Példa tesztek
teszt 1 -eq 2 && echo "igen" || visszhang "nem"
("nem" jelenik meg a képernyőn, mert 1 nem egyenlő 2-vel)
teszt 1 -ge 2 && echo "igen" || visszhang "nem"
("nem" jelenik meg a képernyőn, mert az 1 nem nagyobb, vagy nem egyenlő 2-vel)
teszt 1 -gt 2 && echo "igen" || visszhang "nem"
("nem"-et jelenít meg a képernyőn, mert az 1 nem nagyobb, mint 2)
teszt 1 -le 2 && echo "igen" || visszhang "nem"
("igen" jelenik meg a képernyőn, mert az 1 kisebb vagy egyenlő, mint 2)
teszt 1 -lt 2 && echo "igen" || visszhang "nem"
("igen" jelenik meg a képernyőn, mert az 1 kisebb vagy egyenlő, mint 2)
teszt 1 -ne 2 && echo "igen" || visszhang "nem"
("igen" jelenik meg a képernyőn, mert 1 nem egyenlő 2-vel)
Szöveg összehasonlítása
Ha karakterláncként elemző elemeket hasonlít össze, használja a következő összehasonlító operátorokat:
- =: az 1. karakterlánc megfelel a 2. karakterláncnak
- !=: az 1. karakterlánc nem egyezik a 2. karakterlánccal
- -n: a karakterlánc hossza nagyobb, mint 0
- -z: a karakterlánc hossza 0
Példák
teszt "string1" = "karakterlánc2" && echo "yes" || visszhang "nem"
("nem" jelenik meg a képernyőn, mert a "string1" nem egyenlő a "string2"-vel)
teszt "karakterlánc1" != "karakterlánc2" && echo "igen" || visszhang "nem"
("igen"-t jelenít meg a képernyőn, mert a "karakterlánc1" nem egyenlő a "karakterlánc2"-vel)
teszt -n "karakterlánc1" && echo "igen" || visszhang "nem"
("igen"-t jelenít meg a képernyőn, mert a "string1" karakterláncának hossza nagyobb, mint nulla)
teszt -z "karakterlánc1" && echo "igen" || visszhang "nem"
("nem" jelenik meg a képernyőn, mert a "string1" karakterlánc hossza nagyobb, mint nulla)
Fájlok összehasonlítása
A fájlok összehasonlításakor használja a következő összehasonlító operátorokat:
- -ef: A fájloknak ugyanaz az eszköz- és inode száma (ugyanaz a fájl)
- -nt: Az első fájl újabb, mint a második
- -ot: Az első fájl régebbi, mint a második
- -b: A fájl létezik és van blokk speciális
- -c: A fájl létezik és van karakter különleges
- -d: A fájl létezik, és egy könyvtár
- -e: A fájl létezik
- -f: A fájl létezik, és egy normál fájl
- -g: A fájl létezik, és a megadott csoportszámmal rendelkezik
- -G: A fájl létezik és tulajdonosa a felhasználó csoportja szerint
- -h vagy -L: A fájl létezik, és a szimbolikus link
- -k: A fájl létezik, és be van állítva a tapadó bitje
- -O: A fájl létezik, Ön a tulajdonosa
- -o: A fájl létezik, és egy elnevezett cső
- -r: A fájl létezik és olvasható
- -s: A fájl létezik, mérete nagyobb, mint nulla
- -S: A fájl létezik, és a foglalat
- -t: A fájlleíró megnyitása a terminál
- -u: A fájl létezik, és a set-user-id bit be van állítva
- -w: A fájl létezik és írható
- -x: A fájl létezik és futtatható
Példák
teszt /útvonal/fájl1 -nt /elérési út/fájl2 && echo "igen"
(Ha a fájl1 újabb, mint a fájl2, akkor az "igen" szó jelenik meg)
teszt -e /fájl1 elérési útja && echo "igen"
(ha a fájl1 létezik, akkor az "igen" szó jelenik meg)
teszt -O /fájl1 elérési útja && echo "igen"
(ha a fájl1 tulajdonosa, akkor az "igen" szó jelenik meg)
Különleges blokk: A fájl egy blokkeszköz, ami azt jelenti, hogy az adatok bájt blokkokban kerülnek beolvasásra. Ezek általában eszközfájlok, például merevlemezek.
Különleges karakter: A fájl azonnal reagál, amikor ír rá, és általában egy eszköz, például soros port
Több feltétel összehasonlítása
Eddig minden egy dolgot a másikhoz hasonlított, de mi van, ha két feltételt akarunk összehasonlítani?
Például, ha egy állatnak négy lába van, és "moo"-t mond, akkor valószínűleg tehénről van szó. A négy láb puszta ellenőrzése nem garantálja, hogy van egy tehened, de ha ellenőrizzük a hangot, az biztosan igen.
Mindkét feltétel egyszerre történő teszteléséhez használja a következő utasítást:
teszt 4 -eq 4 -a "moo" = "moo" && echo "ez egy tehén" || visszhang "ez nem tehén"
A legfontosabb rész itt az -a zászló, amely azt jelenti és.
Van egy jobb és gyakrabban használt módszer ugyanazon teszt végrehajtására, amely a következő:
teszt 4 -eq 4 && teszt "moo" = "moo" && echo "ez egy tehén" || visszhang "ez nem tehén"
Kövesd az ágakat!
Az elágazás a teszt parancs jelentős. Ha az első teszt (4 = 4) sikertelen, a teszt parancs nullától eltérő kilépési kóddal fejeződik be. Így a duplacsöves szimbólumra ugrunk, és az "ez nem tehén" szabványos kimenetre nyomtat. Ha azonban az első teszt sikerül és így teszt kilépési kódot eredményez 0, majd ugrunk az első kettős és-jelre. Ez a következő állítás egy újabb tesztfeltétel!
Ha a második teszt sikertelen, ismét a duplacsőhöz ugorunk, és onnan folytatjuk. Ha azonban a második teszt sikeres, akkor ugorjunk a második dupla és-jel utasításra, amely be ez a példa csak azt visszhangozza, hogy "ez egy tehén" a szabványos kimenetre, majd visszatér a héjhoz gyors.
Egy másik teszt összehasonlít két állítást, és ha bármelyik igaz, akkor egy karakterláncot ad ki. Például a következő paranccsal ellenőrizheti, hogy létezik-e egy "file1.txt" nevű fájl vagy egy "file1.doc" nevű fájl:
teszt -e fájl1.txt -o -e fájl1.doc && echo "fájl1 létezik" || echo "fájl1 nem létezik"
A legfontosabb rész itt az -o ami azt jelenti vagy.
Van egy jobb és gyakrabban használt módszer ugyanazon teszt végrehajtására, amely a következő:
teszt -e fájl1.txt || teszt -e file1.doc && echo "fájl1 létezik" || echo "fájl1 nem létezik"
A teszt kulcsszó megszüntetése
Valójában nem kell használnod a szót teszt az összehasonlítás elvégzéséhez. Csak annyit kell tennie, hogy az állítást szögletes zárójelbe kell tennie az alábbiak szerint:
[ -e fájl1.txt ] && echo "fájl1 létezik" || echo "fájl1 nem létezik"
Az [ és ] alapvetően ugyanazt jelenti, mint teszt.
Most már tudja, hogy több feltétel összehasonlításával javíthat az alábbiak szerint:
[ 4 -eq 4 ] && [ "moo" = "moo" ] && echo "ez egy tehén" || visszhang "ez nem tehén"
[ -e fájl1.txt ] || [ -e file1.doc ] && echo "fájl1 létezik" || echo "fájl1 nem létezik"
Összegzés
A tesztparancs hasznosabb a szkriptekben, mert tesztelheti az egyik változó értékét a másikkal szemben, és szabályozhatja a programfolyamatot. A parancssorban ellenőrizze, hogy létezik-e egy fájl vagy sem.