Skip to main content

Kā izmantot pārbaudes nosacījumus Bash Script

Anonim

Testa komandu var izmantot Linux komandrindā, lai salīdzinātu vienu elementu pret citu, bet tas visbiežāk tiek izmantots BASH čaulas skriptos kā daļa no nosacījuma paziņojumiem, kas kontrolē loģiku un programmu plūsmu.

Pamata piemērs

Jūs varat izmēģināt šīs komandas, vienkārši atverot termināla logu.

tests 1-eq 2 && echo "jā" || echo "no"

Iepriekš minēto komandu var sadalīt šādi:

  • tests - tas nozīmē, ka jūs gatavojaties veikt salīdzinājumu
  • 1 - Pirmais elements, ko jūs salīdzināt
  • -Eq - kā jūs salīdzināt. Šajā gadījumā jūs pārbauda, ​​vai viens numurs ir vienāds ar citu.
  • 2 - elements, ar ko salīdzina pirmo elementu pret
  • && - Izpildiet šādu paziņojumu, ja rezultāts ir taisnība
  • echo "yes" - komandu palaist, ja salīdzinājums atgriež patiess
  • || - Izpildiet šādu paziņojumu, ja rezultāts ir nepatiesa
  • echo "no" - komandu palaist, ja salīdzinājums atgriež false

Būtībā komanda salīdzina 1 līdz 2 un, ja tie sakrīt, tiek izpildīts echo "yes" paziņojums, kas parāda "jā" un ja tie nesakrīt, tiek izpildīts echo "no" paziņojums, kas parāda "nē".

Numura salīdzināšana

Ja salīdzina elementus, kas parsē kā skaitļus, varat izmantot šādus salīdzināšanas operatorus:

  • -eq - vai vērtība 1 ir vienāda vērtība 2
  • -ge - ir vērtība 1, kas 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 - ir vērtība 1, kas ir mazāka vai vienāda ar vērtību 2
  • -lt - vērtība 1 ir mazāka par vērtību 2
  • -ne - vērtība 1 nav vienāda vērtība 2

Piemēri

tests 1-eq 2 && echo "jā" || echo "no"

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

tests 1-ej 2 un echo "jā" || echo "no"

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

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

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

tests 1-lo 2 && atbalss "jā" || echo "no"

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

tests 1-lt 2 && atbalss "jā" || echo "no"

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

tests 1 -ne 2 && echo "jā" || echo "no"

(ekrānā parādās "jā", jo 1 nav vienādas 2)

Teksta salīdzinājums

Ja salīdzina elementus, kas parsē kā virknes, varat izmantot šādus salīdzināšanas operatorus:

  • = - Vai 1. virknes atbilstības virkne 2
  • ! = - ir 1. virkne, kas atšķiras no 2. virknes
  • -n - virknes garums ir lielāks par 0
  • -z - ir virknes garums 0

Piemēri

tests "string1" = "string2" && echo "jā" || echo "no"

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

tests "string1"! = "string2" && echo "jā" || echo "no"

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

tests -n "string1" && echo "jā" || echo "no"

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

tests -z "string1" && echo "jā" || echo "no"

(ekrānā parādās "nē", jo "string1" garums ir lielāks par nulli)

Failu salīdzināšana

Ja salīdzina failus, varat izmantot šādus salīdzināšanas operatorus:

  • -ef - Vai failiem ir tāda pati ierīce un inode numuri (vai tie ir viens un tas pats fails)
  • -nt - Vai pirmais fails ir jaunāks par otro failu
  • -ot - Vai pirmais fails ir vecāks par otro failu
  • -b - Fails pastāv un ir bloks īpašs
  • -c - Fails pastāv un ir īpašs raksturs
  • -d - Fails pastāv un ir katalogs
  • -e - fails pastāv
  • -f - Fails pastāv un ir parasts fails
  • -g - Fails pastāv un tam ir norādītais grupas numurs
  • -G - lietotāja grupa ir eksistējusi un īpašnieks
  • -h - fails pastāv un ir simboliska saite
  • -k - Fails pastāv un tam ir piesaistīts bits
  • -L - tāpat kā -h
  • -O - ​​fails ir, ka esat īpašnieks
  • -p - Fails pastāv un ir nosaukta caurule
  • -r - Fails pastāv un ir lasāms
  • -s - Fails pastāv un tā lielums ir lielāks par nulli
  • -S - fails pastāv un ir ligzda
  • -t - Termiņā tiek atvērts failu deskriptors
  • -u - Fails pastāv un tiek iestatīts iestatītā lietotāja ID bits
  • -w - fails pastāv un ir rakstāms
  • -x - Fails pastāv un ir izpildāms

Piemēri

tests / path / to / file1-nt / path / to / file2 && echo "jā"

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

tests -e / path / to / file1 && echo "jā"

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

tests -O / path / to / file1 && echo "jā"

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

Terminoloģija

  • Bloķēt īpašu - fails ir bloķēšanas ierīce, kas nozīmē, ka dati tiek lasīti bitu blokos. Tie parasti ir ierīces faili, piemēram, cietais disks.
  • Rakstzīmju īpašs - fails tiek darbināts uzreiz, kad rakstāt uz to un parasti ir ierīce, piemēram, seriālais ports

Multiple nosacījumu salīdzināšana

Līdz šim viss ir salīdzinājis vienu lietu pret otru, bet ko tad, ja vēlaties salīdzināt divus nosacījumus?

Piemēram, ja dzīvniekam ir 4 kājas un iet "moo", tas, iespējams, ir govs. Vienkārši pārbaudot 4 kājas, negarantē, ka jums ir govs, bet, protams, pārbauda skaņu.

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

tests 4-eq 4 -a "moo" = "moo" && echo "tas ir govs" || echo "tas nav govs"

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

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

tests 4-eq 4 && tests "moo" = "moo" && echo "tas ir govs" || echo "tas nav govs"

Vēl viens tests, ko jūs, iespējams, vēlēsities veikt, ir divu paziņojumu salīdzināšana, un, ja tie ir patiesi, izvadiet virkni. Piemēram, ja vēlaties pārbaudīt, vai pastāv fails ar nosaukumu "file1.txt" vai ja pastāv faila nosaukums "file1.doc", varat izmantot šādu komandu:

tests -e file1.txt -o -e file1.doc && echo "file1 exists" || echo "file1 neeksistē"

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

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

tests -e file1.txt || tests-e file1.doc && echo "file1 exists" || echo "file1 neeksistē"

Pārbaudes atslēgas novēršana

Lai veiktu salīdzināšanu, jums patiešām nav nepieciešams izmantot vārdu pārbaudi. Viss, kas jums jādara, pievienojiet paziņojumu kvadrātiekavās šādi:

-e file1.txt && echo "file1 eksistē" || echo "file1 neeksistē"

Un būtībā nozīmē to pašu, kā testu.

Tagad jūs to zināt, jūs varat uzlabot, salīdzinot vairākus nosacījumus, šādi:

4-eq 4 && "moo" = "moo" && echo "tā ir govs" || echo "tas nav govs"-e file1.txt || -e file1.doc && echo "file1 eksistē" || echo "file1 neeksistē"

Kopsavilkums

Testa komanda ir vairāk noderīga skriptos, jo jūs varat pārbaudīt viena mainīgā vērtību pret citu un kontroles programmas plūsmu. Standarta komandrindā varat to izmantot, lai pārbaudītu, vai fails pastāv vai ne.