Skip to main content

Cómo utilizar las condiciones de prueba dentro de un script de Bash

NYSTV - Real Life X Files w Rob Skiba - Multi Language (Abril 2025)

NYSTV - Real Life X Files w Rob Skiba - Multi Language (Abril 2025)
Anonim

El comando de prueba se puede usar en la línea de comandos de Linux para comparar un elemento con otro, pero se usa más comúnmente en los scripts de shell de BASH como parte de las declaraciones condicionales que controlan la lógica y el flujo del programa.

Un ejemplo básico

Puede probar estos comandos simplemente abriendo una ventana de terminal.

prueba 1 -eq 2 && eco "sí" || eco "no"

El comando anterior se puede desglosar de la siguiente manera:

  • prueba - Esto significa que estás a punto de realizar una comparación
  • 1 - El primer elemento que vas a comparar.
  • -eq - como estas comparando En este caso, está comprobando si un número es igual a otro.
  • 2 - El elemento con el que estás comparando el primer elemento
  • && - Ejecuta la siguiente declaración si el resultado es verdadero
  • echo "yes" - El comando para ejecutar si la comparación devuelve true
  • || - Ejecute la siguiente declaración si el resultado es falso
  • echo "no" - El comando para ejecutar si la comparación devuelve falso

En esencia, el comando está comparando 1 a 2 y si coinciden, se ejecuta la instrucción echo "sí" que muestra "sí" y, si no coinciden, se ejecuta la instrucción echo "no" que muestra "no".

Comparando numeros

Si está comparando elementos que se analizan como números, puede usar los siguientes operadores de comparación:

  • -eq - tiene valor 1 igual valor 2
  • -ge - es el valor 1 mayor o igual al valor 2
  • -gt - es el valor 1 mayor que el valor 2
  • -le - es el valor 1 menor o igual al valor 2
  • -lt - es el valor 1 menos que el valor 2
  • -ne - el valor 1 no es igual al valor 2

Ejemplos

prueba 1 -eq 2 && eco "sí" || eco "no"

(muestra "no" en la pantalla porque 1 no es igual a 2)

prueba 1 -ge 2 && eco "sí" || eco "no"

(muestra "no" en la pantalla porque 1 no es mayor o igual a 2)

prueba 1 -gt 2 && eco "sí" || eco "no"

(muestra "no" en la pantalla porque 1 no es mayor que 2)

prueba 1 -le 2 && eco "sí" || eco "no"

(muestra "sí" en la pantalla porque 1 es menor o igual a 2)

prueba 1 -lt 2 && eco "sí" || eco "no"

(muestra "sí" en la pantalla porque 1 es menor o igual a 2)

prueba 1 -ne 2 && eco "sí" || eco "no"

(muestra "sí" en la pantalla porque 1 no es igual a 2)

Comparando texto

Si está comparando elementos que se analizan como cadenas, puede usar los siguientes operadores de comparación:

  • = - ¿la cadena 1 coincide con la cadena 2?
  • ! = - es la cadena 1 diferente a la cadena 2
  • -n - es la longitud de cadena mayor que 0
  • -z - es la longitud de cadena 0

Ejemplos

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

(muestra "no" en la pantalla porque "string1" no es igual a "string2")

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

(muestra "sí" en la pantalla porque "string1" no es igual a "string2")

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

(muestra "sí" en la pantalla porque "string1" tiene una longitud de cadena mayor que cero)

prueba -z "string1" && eco "sí" || eco "no"

(muestra "no" en la pantalla porque "string1" tiene una longitud de cadena mayor que cero)

Comparando archivos

Si está comparando archivos, puede usar los siguientes operadores de comparación:

  • -ef - ¿Los archivos tienen los mismos números de dispositivo e inodo (son el mismo archivo)?
  • -nt - Es el primer archivo más nuevo que el segundo archivo
  • -ot - Es el primer archivo anterior al segundo archivo
  • -b - El archivo existe y es especial de bloque.
  • -c - El archivo existe y es de carácter especial.
  • -d - El archivo existe y es un directorio.
  • -e - El archivo existe
  • -f - El archivo existe y es un archivo regular
  • -g - El archivo existe y tiene el número de grupo especificado
  • -G - El archivo existe y propietario por el grupo del usuario.
  • -h - El archivo existe y es un enlace simbólico.
  • -k - El archivo existe y tiene establecido su bit adhesivo
  • -L - Lo mismo que -h
  • -O - ​​El archivo existe usted es el propietario.
  • -p - El archivo existe y es una tubería con nombre
  • -r - El archivo existe y es legible
  • -s - El archivo existe y tiene un tamaño mayor que cero
  • -S - El archivo existe y es un socket.
  • -t - El descriptor de archivo se abre en un terminal
  • -u: el archivo existe y se establece el bit de ID de usuario establecido
  • -w - El archivo existe y se puede escribir
  • -x - El archivo existe y es ejecutable.

Ejemplos

prueba / ruta / a / archivo1 -nt / ruta / a / archivo2 && eco "sí"

(Si file1 es más reciente que file2, se mostrará la palabra "yes")

prueba -e / ruta / a / archivo1 && eco "sí"

(Si existe el archivo 1, se mostrará la palabra "sí")

prueba -O / ruta / a / archivo1 && eco "sí"

(Si posee el archivo 1, se muestra la palabra "sí")

Terminología

  • Bloqueo especial: el archivo es un dispositivo de bloque, lo que significa que los datos se leen en bloques de bytes. Estos son generalmente archivos de dispositivos como discos duros.
  • Carácter especial: el archivo se ejecuta de inmediato cuando se escribe en él y, por lo general, es un dispositivo como un puerto serie.

Comparando múltiples condiciones

Hasta ahora, todo ha estado comparando una cosa con otra, pero ¿y si quieres comparar dos condiciones?

Por ejemplo, si un animal tiene 4 patas y dice "muuuy", es probable que sea una vaca. El simple hecho de verificar las 4 patas no garantiza que tengas una vaca, sino que comprobar el sonido que produce seguramente.

Para probar ambas condiciones a la vez usa la siguiente declaración:

prueba 4 -eq 4 -a "moo" = "moo" && echo "es una vaca" || echo "no es una vaca"

La parte clave aquí es la -a que significa y .

Existe una forma mejor y más comúnmente utilizada de realizar la misma prueba y es la siguiente:

prueba 4 -eq 4 && prueba "moo" = "moo" && echo "es una vaca" || echo "no es una vaca"

Otra prueba que podría querer hacer es comparar dos afirmaciones y, si cualquiera de las dos es verdadera, genera una cadena. Por ejemplo, si desea comprobar que existe un archivo llamado "file1.txt" o un archivo llamado "file1.doc", puede usar el siguiente comando:

prueba -e archivo1.txt -o -e archivo1.doc && echo "archivo1 existe" || echo "archivo1 no existe"

La parte clave aquí es la -o que significa o .

Existe una forma mejor y más comúnmente utilizada de realizar la misma prueba y es la siguiente:

prueba -e file1.txt || prueba -e archivo1.doc && echo "archivo1 existe" || echo "archivo1 no existe"

Eliminar la palabra clave de prueba

No es necesario utilizar la prueba de palabras para realizar la comparación. Todo lo que tienes que hacer es encerrar la declaración entre corchetes de la siguiente manera:

-e file1.txt && echo "archivo1 existe" || echo "archivo1 no existe"

El y básicamente significa lo mismo que prueba.

Ahora que sabe esto, puede mejorar la comparación de múltiples condiciones de la siguiente manera:

4 -eq 4 && "moo" = "moo" && echo "es una vaca" || echo "no es una vaca"-e file1.txt || -e archivo1.doc && echo "archivo1 existe" || echo "archivo1 no existe"

Resumen

El comando de prueba es más útil en los scripts porque puede probar el valor de una variable contra otra y controlar el flujo del programa. En la línea de comando estándar, puede usarlo para probar si un archivo existe o no.