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

El comando de prueba se puede usar en la línea de comando 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.

El comando de prueba se puede usar en la línea de comando 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 && echo "yes" || echo "no" 

El comando anterior se puede desglosar de la siguiente manera:

  • prueba: esto significa que está a punto de realizar una comparación
  • 1 – El primer elemento que vas a comparar
  • -eq – ¿Cómo te estás comparando? En este caso, está probando si un número es igual a otro.
  • 2 – El elemento con el que estás comparando el primer elemento
  • && – Ejecute la siguiente instrucción si el resultado es verdadero
  • echo «yes» – El comando a ejecutar si la comparación devuelve verdadero
  • || – Ejecute la siguiente instrucción si el resultado es falso
  • echo «no» – El comando a ejecutar si la comparación devuelve falso

En esencia, el comando compara 1 a 2 y si coinciden, se ejecuta la instrucción echo «yes» que muestra «yes» y si no coinciden, se ejecuta la instrucción echo «no» que muestra «no».

Comparar números

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

  • -eq – 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 que el valor 2
  • -lt – es el valor 1 menor que el valor 2
  • -ne – el valor 1 no es igual al valor 2

Ejemplos

 prueba 1 -eq 2 && echo "yes" || echo "no" 

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

 prueba 1 -ge 2 && echo "yes" || echo "no" 

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

 prueba 1 -gt 2 && echo "yes" || echo "no" 

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

 prueba 1 -le 2 && echo "yes" || echo "no" 

(muestra «sí» en la pantalla porque 1 es menor o igual que 2)

 prueba 1 -lt 2 && echo "yes" || echo "no" 

(muestra «sí» en la pantalla porque 1 es menor o igual que 2)

 prueba 1 -ne 2 && echo "yes" || echo "no" 

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

Comparar 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 la cadena mayor que 0
  • -z – es la longitud de la cadena 0

Ejemplos

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

(muestra «no» en la pantalla porque «cadena1» no es igual a «cadena2»)

 prueba "string1"!= "cadena2" && echo "sí" || echo "no" 

(muestra «sí» en la pantalla porque «cadena1» no es igual a «cadena2»)

 prueba -n "cadena1" && echo "sí" || echo "no" 

(muestra «sí» en la pantalla porque «cadena1» tiene una longitud de cadena mayor que cero)

 prueba -z "cadena1" && echo "sí" || echo "no" 

(muestra «no» en la pantalla porque «cadena1» tiene una longitud de cadena mayor que cero)

Comparación de archivos

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

  • -ef – ¿Los archivos tienen el mismo dispositivo y números de 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 un bloque especial
  • -c: el archivo existe y tiene un carácter especial
  • -d: el archivo existe y es un directorio
  • -e: el archivo existe
  • -f: el archivo existe y es un archivo normal
  • -g: el archivo existe y tiene el número de grupo especificado
  • -G: el archivo existe y es propietario por el grupo de usuarios
  • -h: el archivo existe y es un enlace simbólico
  • -k: el archivo existe y tiene su conjunto de bits fijos
  • -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 set-user-id
  • -w: el archivo existe y se puede escribir
  • -x: el archivo existe y es ejecutable

Ejemplos

 prueba/ruta/a/archivo1 -nt/ruta/a/archivo2 && echo "yes" 

(Si el archivo1 es más nuevo que el archivo2, se mostrará la palabra «sí»)

 prueba -e/ruta/al/archivo1 && echo "yes" 

(si existe el archivo 1, se mostrará la palabra «sí»)

 prueba -O/ruta/al/archivo1 && echo "yes" 

(si posee el archivo1, se muestra la palabra «sí»)

Terminología

  • Bloque especial: el archivo es un dispositivo de bloque, lo que significa que los datos se leen en bloques de bytes. En general, estos son archivos de dispositivo, como discos duros.
  • Carácter especial: se actúa inmediatamente sobre el archivo cuando se escribe en él y normalmente es un dispositivo como un puerto serie

Comparar múltiples condiciones

Hasta ahora, todo ha estado comparando una cosa con otra, pero ¿qué pasa si desea comparar dos condiciones?

Por ejemplo, si un animal tiene 4 patas y dice «muu», probablemente sea una vaca. Simplemente verificar 4 patas no garantiza que tengas una vaca, pero verificar el sonido que produce seguramente lo hace.

Para probar ambas condiciones a la vez, use 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 .

Hay una forma mejor y más 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 puede hacer es comparar dos afirmaciones y, si alguna es verdadera, generar una cadena. Por ejemplo, si desea verificar que exista un archivo llamado «file1.txt» o que exista un archivo llamado «file1.doc», puede usar el siguiente comando:

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

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

Hay una forma mejor y más utilizada de realizar la misma prueba y es la siguiente:

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

Eliminar la palabra clave de prueba

En realidad, no necesita usar la prueba de palabras para realizar la comparación. Todo lo que tiene que hacer es encerrar la declaración entre corchetes de la siguiente manera:

 [-e archivo1.txt] && echo "archivo1 existe" || echo "el archivo1 no existe" 

El [y] básicamente significa lo mismo que prueba.

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

 [4 -eq 4] && ["moo" = "moo"] && echo "es una vaca" || echo "no es una vaca" 
[-e archivo1.txt] || [-e archivo1.doc] && echo "archivo1 existe" || echo "el 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 usarla para probar si un archivo existe o no.

Rate article
labsfabs.com
Add a comment