Kā izmantot testa nosacījumus Bash skriptā

The Linuxpārbaude komanda salīdzina vienu elementu ar citu, taču to biežāk izmanto BASH čaulas skripti kā daļa no nosacījuma paziņojumi kas kontrolē loģiku un programmu plūsmu.

Pamatpiemērs

testa piemērs

Izmēģiniet šīs komandas termināļa logs.

tests 1 -eq 2 && atbalss "jā" || atbalss "nē"

Iepriekš minētā komanda sadalās šādi:

  • pārbaude: komanda, lai veiktu salīdzināšanu
  • 1: pirmais elements, ko jūs gatavojaties salīdzināt. Šajā piemērā tas ir numurs 1 bet tas var būt jebkurš skaitlis vai virkne pēdiņās.
  • -ekv: Salīdzināšanas metode. Šajā gadījumā jūs pārbaudāt, vai viena vērtība ir vienāda ar citu.
  • 2: elements, ar kuru jūs salīdzināt pirmo elementu. Šajā piemērā tas ir numurs 2.
  • &&: Linux saīsne, lai secīgi apvienotu komandas. Izvade no testa ķēdēm uz sekojošajām komandām. Dubultzīme tiek izpildīta, ja pirms tās esošās komandas izejas statuss ir 0, kas ir izdomāts veids, kā teikt, ka komanda neizdevās.
  • atbalss "jā": komanda, kas jāpalaiž, ja salīdzināšana izdodas. Šajā gadījumā viss, ko mēs darām, ir jautāt
    atbalss komandu, lai standarta izvadē izdrukātu vārdu "jā", taču šeit varat palaist jebkuru komandu, kas tiktu izpildīta, ja testa rezultāts izrādītos patiess.
  • ||: savā ziņā pretējs &&; dubultā caurule tiek izpildīta tikai tad, ja komanda, kas ir pirms tās, neizdodas (ir izejas statuss, kas nav 0).
  • atbalss "nē": komanda, kas jāpalaiž, ja salīdzināšana neizdodas.

Palaist no čaulas uzvednes, pārbaude neatgriež vērtību standarta izvadei, tas tikai atgriež izejas statusa kodu. Tāpēc ir nepieciešama atbalss komandas ķēde.

pārbaudes izejas statuss

Būtībā komanda salīdzina 1 ar 2, un, ja tie sakrīt, tiek izpildīts atbalss "jā" paziņojums kas parāda "jā" un, ja tie nesakrīt, tiek izpildīts atbalss "nē" paziņojums, kas parāda "Nē."

Skaitļu salīdzināšana

Ja salīdzinat elementus, kas tiek parsēti kā skaitļi, varat izmantot šādus salīdzināšanas operatorus:

  • -ekv: vērtība 1 ir vienāda ar vērtību 2
  • -ge: vērtība 1 ir lielāka vai vienāda ar vērtību 2
  • -gt: vērtība 1 ir lielāka par vērtību 2
  • -le: vērtība 1 ir mazāka vai vienāda ar vērtību 2
  • -lt: vērtība 1 ir mazāka par vērtību 2
  • -nē: vērtība 1 nav vienāda ar vērtību 2

Testu piemēri

tests 1 -eq 2 && atbalss "jā" || atbalss "nē"

(ekrānā tiek parādīts "nē", jo 1 nav vienāds ar 2)

tests 1 -ge 2 && echo "jā" || atbalss "nē"

(ekrānā tiek parādīts "nē", jo 1 nav lielāks vai vienāds ar 2)

tests 1 -gt 2 && echo "jā" || atbalss "nē"

(ekrānā tiek parādīts "nē", jo 1 nav lielāks par 2)

tests 1 -le 2 && echo "jā" || atbalss "nē"

(ekrānā tiek parādīts "jā", jo 1 ir mazāks vai vienāds ar 2)

tests 1 -lt 2 && atbalss "jā" || atbalss "nē"

(ekrānā tiek parādīts "jā", jo 1 ir mazāks vai vienāds ar 2)

tests 1 -ne 2 && atbalss "jā" || atbalss "nē"

(ekrānā tiek parādīts "jā", jo 1 nav vienāds ar 2)

Teksta salīdzināšana

Salīdzinot elementus, kas tiek parsēti kā virknes, izmantojiet šādus salīdzināšanas operatorus:

  • =: 1. virkne atbilst 2. virknei
  • !=: 1. virkne neatbilst 2. virknei
  • -n: virknes garums ir lielāks par 0
  • -z: virknes garums ir vienāds ar 0

Piemēri

tests "string1" = "string2" && echo "yes" || atbalss "nē"

(ekrānā tiek parādīts "nē", jo "string1" nav vienāds ar "string2")

tests "string1" != "string2" && echo "yes" || atbalss "nē"

(ekrānā tiek parādīts "jā", jo "string1" nav vienāds ar "string2")

tests -n "string1" && echo "jā" || atbalss "nē"

(ekrānā tiek parādīts "jā", jo "string1" virknes garums ir lielāks par nulli)

test -z "string1" && echo "yes" || atbalss "nē"

(ekrānā tiek parādīts "nē", jo "string1" virknes garums ir lielāks par nulli)

Failu salīdzināšana

Salīdzinot failus, izmantojiet šādus salīdzināšanas operatorus:

  • -ef: failiem ir viena un tā pati ierīces un inode numuri (vai tie ir viens un tas pats fails)
  • -nt: pirmais fails ir jaunāks par otro failu
  • -ot: pirmais fails ir vecāks par otro failu
  • -b: fails pastāv un ir bloks īpašs
  • -c: fails pastāv un ir raksturs īpašs
  • -d: fails pastāv un ir direktorijs
  • -e: fails pastāv
  • -f: fails pastāv un ir parasts fails
  • -g: fails pastāv, un tam ir norādīts grupas numurs
  • -G: fails pastāv, un tā īpašnieks ir lietotāju grupa
  • -h vai -L: fails pastāv un ir a simboliska saite
  • -k: fails pastāv, un tam ir iestatīts lipīgais bits
  • -O: fails pastāv, jūs esat īpašnieks
  • -lpp: fails pastāv, un tam ir nosaukta caurule
  • -r: fails pastāv un ir lasāms
  • -s: fails pastāv, un tā izmērs ir lielāks par nulli
  • -S: fails pastāv un ir a kontaktligzda
  • -t: faila deskriptors tiek atvērts a terminālis
  • -u: fails pastāv, un set-user-id bits ir iestatīts
  • -w: fails pastāv un ir rakstāms
  • -x: fails pastāv un ir izpildāms

Piemēri

pārbaudīt /ceļš/uz/file1 -nt /ceļš/uz/fails2 && atbalss "jā"

(Ja fails1 ir jaunāks par failu2, tiks parādīts vārds "jā")

tests -e /ceļš/uz/file1 && atbalss "jā"

(ja fails1 pastāv, tiks parādīts vārds "jā")

tests -O /ceļš/uz/file1 && atbalss "jā"

(ja jums pieder fails1, tiek parādīts vārds "jā")

Īpašais bloks: fails ir blokierīce, kas nozīmē, ka dati tiek nolasīti baitu blokos. Parasti tie ir ierīces faili, piemēram, cietie diski.

Raksturs īpašs: ar failu tiek veiktas darbības nekavējoties, kad tajā ierakstāt, un parasti tā ir ierīce, piemēram, seriālais ports

Vairāku nosacījumu salīdzināšana

Līdz šim viss ir bijis salīdzināt vienu ar otru, bet ko darīt, ja vēlaties salīdzināt divus nosacījumus?

Piemēram, ja dzīvniekam ir četras kājas un viņš iet "moo", iespējams, tā ir govs. Vienkārša četru kāju pārbaude negarantē, ka jums ir govs, taču, pārbaudot tās radīto skaņu, tas noteikti ir.

Lai pārbaudītu abus nosacījumus vienlaikus, izmantojiet šādu paziņojumu:

tests 4 -eq 4 -a "moo" = "moo" && echo "tā ir govs" || atbalss "tā nav govs"

Galvenā daļa šeit ir -a karogs, kas apzīmē un.

Ir labāks un biežāk izmantots veids, kā veikt vienu un to pašu testu, un tas ir šāds:

tests 4 -eq 4 && test "moo" = "moo" && echo "tā ir govs" || atbalss "tā nav govs"

Sekojiet zariem!

Sazarojums pārbaude komanda ir nozīmīga. Ja pirmais tests (4 = 4) neizdodas, pārbaude komanda beidzas ar izejas kodu, kas nav nulle. Tādējādi mēs pārejam pie dubultcaurules simbola, un "tā nav govs" tiek drukāts uz standarta izvadi. Taču, ja izdodas pirmais pārbaudījums un līdz ar to pārbaude rezultātā tiek iegūts izejas kods 0, tad pārejam uz pirmo dubulto ampersandu. Šis nākamais apgalvojums ir vēl viens pārbaudes nosacījums!

Ja otrais tests neizdodas, mēs atkal pārejam pie dubultcaurules un turpinām no turienes. Tomēr, ja otrais tests izdodas, mēs pārejam pie otrā dubultā ampersandas paziņojuma, kas tiek iekļauts Šajā piemērā standarta izvadei tikai tiek atbalsots "tā ir govs" un pēc tam tas beidzas atpakaļ uz čaumalu pamudināt.

Citā pārbaudē tiek salīdzināti divi apgalvojumi un, ja kāds no tiem ir patiess, izvada virkni. Piemēram, lai pārbaudītu, vai pastāv fails ar nosaukumu "file1.txt" vai fails ar nosaukumu "file1.doc", varat izmantot šādu komandu:

tests -e fails1.txt -o -e fails1.doc && echo "fails1 pastāv" || echo "fails1 neeksistē"

Galvenā daļa šeit ir -o kas apzīmē vai.

Ir labāks un biežāk izmantots veids, kā veikt vienu un to pašu testu, un tas ir šāds:

test -e fails1.txt || test -e file1.doc && echo "fails1 pastāv" || echo "fails1 neeksistē"

Testa atslēgvārda likvidēšana

Jums faktiski nav nepieciešams lietot šo vārdu pārbaude lai veiktu salīdzināšanu. Viss, kas jums jādara, ir jāiekļauj paziņojums kvadrātiekavās šādi:

[ -e fails1.txt ] && atbalss "fails1 pastāv" || echo "fails1 neeksistē"

The [ un ] būtībā nozīmē to pašu, ko pārbaude.

Tagad jūs zināt, ka varat to uzlabot, salīdzinot vairākus nosacījumus, kā norādīts tālāk.

[ 4 -eq 4 ] && [ "moo" = "moo" ] && atbalss "tā ir govs" || atbalss "tā nav govs"
[ -e fails1.txt ] || [ -e file1.doc ] && echo "fails1 pastāv" || echo "fails1 neeksistē"

Kopsavilkums

Testēšanas komanda ir noderīgāka skriptos, jo varat pārbaudīt viena mainīgā vērtību pret citu un kontrolēt programmas plūsmu. Komandrindā izmantojiet to, lai pārbaudītu, vai fails pastāv vai ne.