Tutoriales

Bash Basics Series #7: La declaración If Else

Bash admite declaraciones if-else para que pueda usar el razonamiento lógico en sus scripts de shell.

La sintaxis general de if-else es la siguiente:

if [ expression ]; then

  ## execute this block if condition is true else go to next

elif [ expression ]; then

  ## execute this block if condition is true else go to next

else 

  ## if none of the above conditions are true, execute this block

fi

Como te diste cuenta:

  • elif Para condiciones de tipo «else if»
  • if else condición siempre termina con fi
  • uso de punto y coma ; y then Palabras clave

Antes de mostrar ejemplos de if y else-if, permítanme compartir expresiones de comparación comunes (también conocidas como condiciones de prueba).

Condiciónes de la prueba

Los siguientes operadores de condiciones de prueba están disponibles para comparaciones numéricas:

Estado de saludEquivalente a verdadero cuando
$a -lt $b$a < $b ($a es IAs tCorea$b)
$a -gt $b$a > $b ($a es GRAMOreproductor tCorea$b)
$a -le $b$a <= $b ($a es Ias o mies igual a $b)
$a -ge $b$a >= $b ($a es GRAMOrepetidor o mies igual a $b)
$a -eq $b$a es igual a $b
$a-ne $b$a no es igual a $b

Si está comparando cadenas, puede usar la siguiente condición de prueba:

Publicaciones relacionadas
Estado de saludEquivalente a verdadero cuando
«$a» = «$b»$a es lo mismo que $b
«$a» == «$b»$a es lo mismo que $b
«$a»! =»$b»$a es diferente de $b
-z «$a»$a está vacío

La verificación del tipo de archivo también es condicional:

Estado de saludEquivalente a verdadero cuando
-f $a$a es un archivo
-d $a$a es un directorio
-L $a$a es un enlace

Ahora que conoce varias expresiones de comparación, veámoslas en acción en varios ejemplos.

usando la sentencia if en bash

Vamos a crear un script que te diga si un número dado es par o no.

Aquí está mi script llamado even.sh:

#!/bin/bash

read -p "Enter the number: " num

mod=$(($num%2))

if [ $mod -eq 0 ]; then
	echo "Number $num is even"
fi

Devuelve cero cuando la operación de módulo (%) se divide exactamente por el número dado (2 en este caso).

🚧

Presta especial atención al espacio. Debe haber un espacio entre los paréntesis de apertura y cierre y la condición. Asimismo, debe haber espacios antes y después de los operadores condicionales (-le, ==, etc.).

Esto es lo que muestra cuando ejecuto el script:

¿Notó que el script le dice cuándo el número es par, pero no muestra nada cuando el número es impar? Mejoremos este script con un else.

Usar sentencia if else

Ahora agregué una declaración else al script anterior. De esta manera, cuando obtenga un módulo distinto de cero (porque los números impares no se pueden dividir por 2), ingresará al bloque else.

#!/bin/bash

read -p "Enter the number: " num

mod=$(($num%2))

if [ $mod -eq 0 ]; then
	echo "Number $num is even"
else
	echo "Number $num is odd"
fi

Vamos a ejecutarlo de nuevo con los mismos números:

ejecute el script bash para verificar la paridad

Como puedes ver, este script es mejor porque también te dice si el número es impar o no.

Use la declaración elif (si no)

Aquí hay un script que verifica si un número dado es positivo o negativo. En matemáticas, el 0 no es ni positivo ni negativo. El script también verifica este hecho.

#!/bin/bash

read -p "Enter the number: " num

if [ $num -lt 0 ]; then
	echo "Number $num is negative"
elif [ $num -gt 0 ]; then
	echo "Number $num is positive"
else
	echo "Number $num is zero"
fi

Déjame ejecutarlo para cubrir los tres casos aquí:

Ejecutar scripts con sentencias bash elif

Combinar múltiples condiciones usando operadores lógicos

Hasta ahora, todo bien. Pero, ¿sabía que puede incluir múltiples condiciones en una condición usando operadores lógicos como AND (&&), OR (||)? Le permite escribir condiciones complejas.

Escribamos un guión que te diga si un año dado es un año bisiesto.

¿Recuerdas las condiciones para un año bisiesto? Debería ser divisible por 4, pero si es divisible por 100, no es un año bisiesto. Sin embargo, si es divisible por 400, es un año bisiesto.

Aquí está mi guión.

#!/bin/bash

read -p "Enter the year: " year

if [[ ($(($year%4)) -eq 0 && $(($year%100)) != 0) || ($(($year%400)) -eq 0) ]]; then
	echo "Year $year is leap year"
else
	echo "Year $year is normal year"
fi

💡

Tenga en cuenta el uso de corchetes dobles [[ ]]más que. Esto es obligatorio si usa operadores lógicos.

Verifique el script ejecutándolo con diferentes datos:

Ejemplo de ejecución de un script bash usando operadores lógicos en la declaración if

🏋️Tiempo de ejercicio

Hagamos un poco de ejercicio 🙂

ejercicio 1: escriba un script de shell bash para comprobar la longitud de una cadena que se le ha dado como argumento. Si no se proporcionan argumentos, imprimirá «cadena vacía».

ejercicio 2: escriba un script de shell para verificar si existe un archivo dado. Puede proporcionar la ruta completa del archivo como argumento o usarla directamente en el script.

pista: use -f para archivos

Ejercicio 3: mejora la secuencia de comandos anterior comprobando si el archivo dado es un archivo, directorio o enlace normal o no existe.

pista: use -f, -d y -L

Ejercicio 3: escriba un script que acepte dos parámetros de cadena. El script debe verificar si la primera cadena contiene el segundo parámetro como una subcadena.

pista: Consulte el capítulo anterior de bash string

Puede discutir su solución en la comunidad:

Serie Bash Fundamentals #7 Ejercicio: Sentencias If Else

Si está siguiendo la serie Bash Basics sobre It’s FOSS, puede enviar y analizar las respuestas a los ejercicios al final de este capítulo: Se alienta a los miembros experimentados a brindar comentarios a los recién llegados. Tenga en cuenta que puede haber más de una respuesta para una pregunta en particular.

Espero que hayas disfrutado de la serie Bash Basics. En el próximo capítulo, aprenderá a usar bucles en Bash. ¡Sigue regañando!

LEER  Valve agrega documentación para el desarrollo de Steam Deck, sugiere Manjaro Linux por ahora

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba