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

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ă:

În esență, comanda compară 1 la 2 și ele se potrivesc cu declarația de "da" a ecoului, care afișează "da" și dacă nu se potrivește cu declarația "nu" de ecou, ​​care afișează "nu".

Comparând numerele

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

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:

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:

Exemple:

test / cale / către / file1 -n / calea / 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

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 cheie 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ă fie unul este adevărat de ieșire 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