Skip to main content

Com s'utilitzen les condicions de prova dins d'un script de comprovació

Anonim

L'ordre de prova es pot utilitzar a la línia de comandaments de Linux per comparar un element amb un altre, però s'utilitza més sovint en els scripts del shell de BASH com a part de les frases condicionals que controlen la lògica i el flux del programa.

Un exemple bàsic

Podeu provar aquests comandaments simplement obrint una finestra de terminal.

prova 1 -eq 2 i & echo "sí" || eco "no"

L'ordre anterior es pot desglossar de la manera següent:

  • prova: això vol dir que esteu a punt de fer una comparació
  • 1 - El primer element que vas a comparar
  • -eq - Com es compara? En aquest cas, esteu provant si un número és igual a un altre.
  • 2 - L'element que està comparant el primer element en contra
  • && - Executeu la següent instrucció si el resultat és veritable
  • echo "sí": l'ordre a executar si la comparació es torna true
  • || - Executeu la següent instrucció si el resultat és fals
  • echo "no" - L'ordre a executar si la comparació retorna false

En essència, la comanda està comparant 1 a 2 i si coincideixen, s'executa la instrucció echo "sí" que mostra "sí" i si no coincideixen, s'executa la instrucció "no" que mostra "no".

Comparant números

Si comparem elements que analitzen com a números, podeu utilitzar els següents operadors de comparació:

  • -eq - val 1 igual valor 2
  • -ge - és el valor 1 major o igual al valor 2
  • -gt - és el valor 1 major que el valor 2
  • -le - té un valor 1 inferior o igual al valor 2
  • -lt - és el valor 1 menys del valor 2
  • -ne - fa que el valor 1 no sigui igual a valor 2

Exemples

prova 1 -eq 2 i & echo "sí" || eco "no"

(mostra "no" a la pantalla perquè 1 no és igual a 2)

prova 1 -ge 2 i & echo "sí" || eco "no"

(mostra "no" a la pantalla perquè 1 no és major ni igual a 2)

prova 1 -gt 2 i & echo "sí" || eco "no"

(mostra "no" a la pantalla perquè 1 no és superior a 2)

prova 1 -le 2 i & echo "sí" || eco "no"

(mostra "sí" a la pantalla perquè 1 és menor o igual que 2)

prova 1 -lt 2 i & echo "sí" || eco "no"

(mostra "sí" a la pantalla perquè 1 és menor o igual que 2)

prova 1-ne 2 i & echo "sí" || eco "no"

(mostra "sí" a la pantalla perquè 1 no és igual a 2)

Comparació de text

Si comparem elements que analitzen com a cadenes, podeu utilitzar els següents operadors de comparació:

  • = - fa cadena 1 cadena de coincidència 2
  • ! = - és cadena 1 diferent a la cadena 2
  • -n - és la longitud de cadena superior a 0
  • -z - és la cadena de longitud 0

Exemples

prova "string1" = "string2" && echo "yes" || eco "no"

(mostra "no" a la pantalla perquè "string1" no és igual a "string2")

prova "string1"! = "string2" && echo "yes" || eco "no"

(mostra "sí" a la pantalla perquè "string1" no és igual a "string2")

test -n "string1" && echo "yes" || eco "no"

(mostra "sí" a la pantalla perquè "string1" té una longitud de cadena superior a zero)

prova -z "string1" && echo "yes" || eco "no"

(mostra "no" a la pantalla perquè "string1" té una longitud de cadena superior a zero)

Comparant fitxers

Si comparem fitxers, podeu utilitzar els següents operadors de comparació:

  • -ef: els fitxers tenen el mateix dispositiu i els nombres d'inode (són el mateix arxiu)
  • -nt - És el primer fitxer més nou que el segon fitxer
  • -ot - És el primer fitxer més antic que el segon fitxer
  • -b - El fitxer existeix i és un bloc especial
  • -c - El fitxer existeix i és un caràcter especial
  • -d - El fitxer existeix i és un directori
  • -e - El fitxer existeix
  • -f - El fitxer existeix i és un fitxer normal
  • -g - El fitxer existeix i té el número de grup especificat
  • -G - El fitxer existeix i el propietari del grup de l'usuari
  • -h - El fitxer existeix i és un enllaç simbòlic
  • -k - El fitxer existeix i té el seu conjunt de bits enganxosos
  • -L - El mateix que -h
  • -O - ​​El fitxer existeix que sou el propietari
  • -p - El fitxer existeix i és una canonada amb nom
  • -r - El fitxer existeix i es pot llegir
  • -s - El fitxer existeix i té una mida major que zero
  • -S - El fitxer existeix i és un socket
  • -t - El descriptor de fitxer s'obre en un terminal
  • -u - El fitxer existeix i s'estableix la bit id-user-id
  • -w - El fitxer existeix i es pot escriure
  • -x - El fitxer existeix i és executable

Exemples

test / path / to / file1 -nt / path / to / file2 i & echo "yes"

(Si el fitxer 1 és més nou que el fitxer2, es mostrarà la paraula "sí")

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

(si file1 existeix, la paraula "sí" es mostrarà)

test-O / path / to / file1 && echo "yes"

(si teniu el fitxer 1, es mostrarà la paraula "sí")

Terminologia

  • Bloc especial: el fitxer és un dispositiu de bloc que vol dir que les dades es llegeixen en blocs de bytes. Normalment són fitxers de dispositius, com ara discs durs.
  • Caràcter especial: el fitxer s'activa immediatament quan l'escriviu i normalment és un dispositiu, com ara un port sèrie

Comparant diverses condicions

Fins a aquí, tot ha estat comparant una cosa amb l'altra, però què passa si voleu comparar dues condicions?

Per exemple, si un animal té 4 potes i va "moo", probablement és una vaca. Simplement, revisar 4 potes no garanteix que tinguis una vaca, sinó que comprova el so que segurament fa.

Per comprovar ambdues condicions alhora, utilitzeu la següent instrucció:

prova 4 -eq 4 -a "moo" = "moo" & & echo "és una vaca" || ressò "no és una vaca"

La part clau aquí és la -a que significa i .

Hi ha una manera millor i més usada de fer la mateixa prova i això és el següent:

prova 4 -eq 4 && test "moo" = "moo" & & echo "és una vaca" || ressò "no és una vaca"

Una altra prova que vulgueu fer és comparar dues instruccions i, si n'hi ha cap, feu una cadena. Per exemple, si voleu comprovar que existeix un fitxer anomenat "file1.txt" o existeix un fitxer anomenat "file1.doc", podeu utilitzar el següent comandament:

test -e file1.txt -o -e file1.doc && echo "file1 exists" || echo "file1 does not exist"

La part clau aquí és la -o que significa o .

Hi ha una manera millor i més usada de fer la mateixa prova i això és el següent:

test -e file1.txt || test -e file1.doc && echo "file1 exists" || echo "file1 does not exist"

Eliminació de la paraula clau de prova

De fet, no cal utilitzar la prova de paraules per realitzar la comparació. Tot el que heu de fer és incloure la declaració entre claudàtors de la següent manera:

-e file1.txt && echo "file1 exists" || echo "file1 does not exist"

El i bàsicament significa el mateix que el test.

Ara sabeu que podeu millorar en comparar diverses condicions de la següent manera:

4-eq 4 && "moo" = "moo" && echo "és una vaca" || ressò "no és una vaca"-e file1.txt || -e file1.doc && echo "file1 exists" || echo "file1 does not exist"

Resum

L'ordre de prova és més útil en les seqüències d'ordres perquè podeu provar el valor d'una variable contra una altra i controlar el flux del programa. A la línia d'ordres estàndard, podeu usar-lo per comprovar si un fitxer existeix o no.