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

tesztpé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.

teszt kilépési állapot

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.