Skip to main content

Cum se utilizează condițiile de testare în cadrul unui script Bash

Contoarele Inteligente - Un progres? (Aprilie 2025)

Contoarele Inteligente - Un progres? (Aprilie 2025)
Anonim

Comanda de test poate fi folosită pe linia de comandă Linux pentru a compara un element cu altul, dar este mai frecvent folosită în scripturile shell BASH, ca parte a instrucțiunilor condiționale care controlează logica și fluxul de programe.

Un exemplu de bază

Puteți încerca aceste comenzi pur și simplu prin deschiderea unei ferestre terminale.

test 1 -eq 2 && echo "da" || echo "nu"

Comanda de mai sus poate fi defalcată după cum urmează:

  • test - Aceasta înseamnă că sunteți pe punctul de a efectua o comparație
  • 1 - Primul element pe care îl veți compara
  • -eq - Cum compari. În acest caz, testați dacă un număr este egal cu altul.
  • 2 - Elementul pe care îl comparați primul element împotriva
  • && - Rulați următoarea declarație dacă rezultatul este adevărat
  • echo "yes" - Comanda pentru a rula în cazul în care comparația returnează adevărat
  • || - Rulați următoarea declarație dacă rezultatul este fals
  • echo "no" - comanda pentru a rula în cazul în care comparația returnează false

În esență, comanda compară 1 la 2, iar dacă se potrivesc, se execută instrucțiunea "da" care afișează "da" și dacă nu se potrivesc, se execută instrucțiunea "nu" care afișează "nu".

Comparând numerele

Dacă comparați elemente care parsează ca numere, puteți utiliza următorii operatori de comparație:

  • -eq - are valoare 1 valoare egală 2
  • -ge - este valoarea 1 mai mare sau egală cu valoarea 2
  • -gt - este valoarea 1 mai mare decât valoarea 2
  • -le - este valoarea 1 mai mică sau egală cu valoarea 2
  • -lt - este valoarea 1 mai mică decât valoarea 2
  • -ne - valoarea 1 nu este egală cu valoarea 2

Exemple

test 1 -eq 2 && echo "da" || echo "nu"

(afișează "nu" pe ecran deoarece 1 nu este egal 2)

test 1 -ge 2 && echo "da" || echo "nu"

(afișează "nu" pe ecran deoarece 1 nu este mai mare sau egal cu 2)

test 1 -gt 2 && echo "da" || echo "nu"

(afișează "nu" pe ecran deoarece 1 nu este mai mare de 2)

test 1 -lea 2 && echo "da" || echo "nu"

(afișează "da" pe ecran deoarece 1 este mai mică sau egală cu 2)

test 1 -lt 2 && echo "da" || echo "nu"

(afișează "da" pe ecran deoarece 1 este mai mică sau egală cu 2)

test 1 -ne 2 && echo "da" || echo "nu"

(afișează "da" pe ecran deoarece 1 nu este egal 2)

Comparând textul

Dacă comparăți elemente care parsează ca șiruri de caractere, puteți utiliza următorii operatori de comparație:

  • = - șirul 1 se potrivește cu șirul 2
  • ! = - este șirul 1 diferit de șirul 2
  • -n - este lungimea șirului mai mare de 0
  • -z - este lungimea șirului 0

Exemple

test "string1" = "string2" && echo "da" || echo "nu"

(afișează "nu" pe ecran deoarece "string1" nu este egal cu "string2")

test "string1"! = "string2" && echo "da" || echo "nu"

(afișează "da" pe ecran deoarece "string1" nu este egal cu "string2")

test -n "string1" && echo "da" || echo "nu"

(afișează "da" pe ecran deoarece "string1" are o lungime de șir mai mare decât zero)

test -z "string1" && echo "da" || echo "nu"

(afișează "nu" pe ecran deoarece "string1" are o lungime de șir mai mare decât zero)

Compararea fișierelor

Dacă comparăți fișiere, puteți utiliza următorii operatori de comparație:

  • -ef - Fișierele au aceleași numere de dispozitiv și inode (sunt același fișier)
  • -nt - Este primul fișier mai nou decât cel de-al doilea fișier
  • -ot - Este primul fișier mai vechi decât al doilea fișier
  • -b - Fișierul există și este bloc special
  • -c - Fișierul există și este caracter special
  • -d - Fișierul există și este un director
  • -e - Fișierul există
  • -f - Fișierul există și este un fișier obișnuit
  • -g - Fișierul există și are numărul de grup specificat
  • -G - Fișierul există și proprietarul de către grupul utilizatorului
  • -h - Fișierul există și este o legătură simbolică
  • -k - Fișierul există și are bitul său lipicios setat
  • -L - La fel ca -h
  • -O - ​​Fișierul există că sunteți proprietarul
  • -p - Fișierul există și este o conductă numită
  • -r - Fișierul există și poate fi citit
  • -s - Fișierul există și are o dimensiune mai mare decât zero
  • -S - Fișierul există și este un soclu
  • -t - Descrierea fișierului este deschisă pe un terminal
  • -u - Fișierul există și bitul set-user-id este setat
  • -w - Fișierul există și este scris
  • -x - Fișierul există și este executabil

Exemple

test / cale / către / file1 -nt / cale / către / file2 && echo "da"

(Dacă fișierul 1 este mai nou decât fișierul2, se va afișa cuvântul "da")

test -e / path / to / file1 && echo "da"

(dacă există fișierul1, va fi afișat cuvântul "da")

test -O / cale / la / fișier1 & & echo "da"

(dacă dețineți fișierul1 atunci cuvântul "da" este afișat ")

Terminologie

  • Bloc special - Fișierul este un dispozitiv bloc, ceea ce înseamnă că datele sunt citite în blocuri de octeți. Acestea sunt, în general, fișiere de dispozitive, cum ar fi hard disk-uri.
  • Caracter speciale - Fișierul este acționat imediat după ce îl scrieți și este de obicei un dispozitiv, cum ar fi un port serial

Compararea condițiilor multiple

Până acum, totul a comparat un lucru cu altul, dar dacă vrei să compari două condiții?

De exemplu, dacă un animal are 4 picioare și merge "moo", este probabil o vacă. Pur și simplu verificarea pentru 4 picioare nu garantează că aveți o vacă, dar verificați sunetul pe care îl face cu siguranță.

Pentru a testa simultan ambele condiții, utilizați următoarea declarație:

test 4 -eq 4 -a "moo" = "moo" & & echo "este o vacă" || echo "nu este o vacă"

Partea esențială aici este -a care reprezintă și .

Există o modalitate mai bună și mai frecvent utilizată de a efectua același test și care este după cum urmează:

test 4 -eq 4 && test "moo" = "moo" & & echo "este o vacă" || echo "nu este o vacă"

Un alt test pe care ar trebui să-l faceți este să comparăți două instrucțiuni și dacă oricare dintre acestea este adevărat, extrageți un șir. De exemplu, dacă doriți să verificați dacă există un fișier numit "file1.txt" sau dacă există un fișier numit "file1.doc", puteți utiliza următoarea comandă:

test -e file1.txt -o -e fișier1.doc && echo "fișierul 1 există" || echo "file1 nu există"

Partea esențială aici este -o care reprezintă sau .

Există o modalitate mai bună și mai frecvent utilizată de a efectua același test și care este după cum urmează:

test -e file1.txt || test -e file1.doc && echo "fișierul1 există" || echo "file1 nu există"

Eliminarea cuvintelor cheie de testare

De fapt, nu trebuie să utilizați testul de cuvinte pentru a efectua comparația. Tot ce trebuie să faceți este să închideți instrucțiunea în paranteze pătrate după cum urmează:

-e fișier1.txt && echo "fișierul 1 există" || echo "file1 nu există"

Și înseamnă în principiu același lucru ca și testul.

Acum știți acest lucru, puteți îmbunătăți compararea mai multor condiții, după cum urmează:

4 -eq 4 && "moo" = "moo" & & echo "este o vacă" || echo "nu este o vacă"-e file1.txt || -e fișier1.doc && echo "fișierul 1 există" || echo "file1 nu există"

rezumat

Comanda de testare este mai utilă în scripturi, deoarece puteți testa valoarea unei variabile în raport cu alta și a controla fluxul programului. Pe linia de comandă standard, o puteți folosi pentru a testa dacă există sau nu un fișier.