Como usar as condicións de proba dentro dun script Bash

O comando de proba pódese empregar na liña de comandos de Linux para comparar un elemento contra outro, pero úsase máis comúnmente nos scripts de shell de BASH como parte das declaracións condicionais que controlan a lóxica eo fluxo do programa.

Un exemplo básico

Podes probar estes comandos simplemente abrindo unha fiestra de terminal .

proba 1 -eq 2 e & echo "si" || eco "non"

O comando anterior pódese dividir do seguinte xeito:

En esencia, o comando está comparando 1 a 2 e coinciden coa eco "afirmación" se executa que mostra "si" e se non coinciden co eco non se executa a sinalización que mostra "non".

Comparando números

Se está a comparar elementos que analizan como números, pode usar os seguintes operadores de comparación:

Exemplos:

proba 1 -eq 2 e & echo "si" || eco "non"

(mostra "non" na pantalla porque 1 non é igual a 2)

proba 1 -ge 2 e & echo "si" || eco "non"

(mostra "non" na pantalla porque 1 non é maior ou igual a 2)

proba 1 -gt 2 e & echo "si" || eco "non"

(mostra "non" na pantalla porque 1 non é maior que 2)

proba 1 -le 2 e & echo "si" || eco "non"

(mostra "si" na pantalla porque 1 é menor ou igual que 2)

proba 1 -lt 2 e & echo "si" || eco "non"

(mostra "si" na pantalla porque 1 é menor ou igual que 2)

proba 1 -ne 2 e & echo "si" || eco "non"

(mostra "si" na pantalla porque 1 non é igual a 2)

Comparación de texto

Se está a comparar elementos que analizan como cadeas pode usar os seguintes operadores de comparación:

Exemplos:

proba "string1" = "string2" && echo "yes" || eco "non"

(mostra "non" na pantalla porque "string1" non equivale a "string2")

proba "string1"! = "string2" && echo "si" || eco "non"

(mostra "si" na pantalla porque "string1" non é igual a "string2")

proba -n "string1" e & echo "si" || eco "non"

(mostra "si" na pantalla porque "string1" ten unha lonxitude de corda superior a cero)

proba -z "string1" && echo "si" || eco "non"

(mostra "non" na pantalla porque "string1" ten unha lonxitude de cadea maior que cero)

Comparando ficheiros

Se está a comparar ficheiros pode usar os seguintes operadores de comparación:

Exemplos:

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

(Se o ficheiro 1 é máis novo que o ficheiro2, aparecerá a palabra "si")

proba -e / path / para / file1 e & echo "si"

(se file1 existe a palabra "si" aparecerá)

proba -O / path / para / file1 e & echo "si"

(se ten o ficheiro 1, aparece a palabra "si")

Terminoloxía

Comparando varias condicións

Ata agora, todo estivo comparando unha cousa contra outra pero que se quere comparar dúas condicións.

Por exemplo, se un animal ten 4 patas e vai "moo", probablemente sexa unha vaca. Simplemente comprobando 4 patas non garante que teña unha vaca senón que comprobe o son que seguramente fai.

Para probar as dúas condicións á vez use a seguinte declaración:

proba 4 -eq 4 -a "moo" = "moo" && echo "é unha vaca" || eco "non é unha vaca"

A parte clave aquí é a -a que representa e.

Existe unha mellor e máis utilizada forma de realizar a mesma proba e é a seguinte:

proba 4 -eq 4 && test "moo" = "moo" && echo "é unha vaca" || eco "non é unha vaca"

Outra proba que podes querer facer é comparar dúas declaracións e se algunha das dúas é certa saia unha cadea. Por exemplo, se quere comprobar que existe un ficheiro chamado "file1.txt" ou existe un ficheiro chamado "file1.doc" pode usar o seguinte comando

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

A parte clave aquí é a -o que significa ou.

Existe unha mellor e máis utilizada forma de realizar a mesma proba e é a seguinte:

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

Eliminando a palabra clave de proba

En realidade non precisa usar a proba de palabras para realizar a comparación. Todo o que tes que facer é incluír o enunciado entre corchetes do seguinte xeito:

[-e file1.txt] && echo "file1 existe" || echo "file1 does not exist"

O [e] basicamente significa o mesmo que o de proba.

Agora xa sabes isto podes mellorar ao comparar varias condicións como segue:

[4 -eq 4] && ["moo" = "moo"] && echo "é unha vaca" || eco "non é unha vaca"

[-e file1.txt] || [-e file1.doc] && echo "file1 existe" || echo "file1 does not exist"

Resumo

O comando de proba é máis útil nos scripts porque pode probar o valor dunha variable contra outra e controlar o fluxo do programa. Na liña de comando estándar, pode usalo para probar se existe un ficheiro ou