GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Scripting - Declaraciones condicionales

En esta guía, aprenderemos el uso de declaraciones condicionales en Bash scripting con ejemplos. La toma de decisiones es un paso importante en la programación. Puede haber una situación en la que se deban cumplir ciertas condiciones y, en base a eso, debe escribir algo de lógica. Esto es lo que hace una declaración condicional. Las sentencias condicionales te permiten escribir lógica y tomar decisiones. El concepto que lees aquí será el mismo para todos los lenguajes de programación, pero con diferencias sintácticas y de implementación.

Sintaxis de declaraciones condicionales

El bloque de construcción de la declaración condicional en bash es el siguiente.

if [[ conditions ]]
then
   code
elif [[ conditions ]]
then
   code
else
   code
fi

Explicación del código:

  1. Las palabras clave "if" y "fi" marcar el inicio y el final de la declaración condicional. Cada instrucción if debe ir seguida de "then" palabra clave.
  2. O [[ ]] o [ ] debe usarse para evaluar la condición. Si la condición se evalúa como "Verdadero" , luego se ejecutará un bloque de código.
  3. Una declaración condicional puede tener una condición if y múltiples elif condiciones. Si una condición se evalúa como verdadera, todas las declaraciones condicionales subsiguientes se omiten.
  4. Si todos los if o elif el bloque se evalúa como falso luego el bloque de código de "else" se ejecutará la cláusula.
  5. Aunque no hay reglas de sangría estrictas, deje 2 espacios para el bloque de código que dará una mejor legibilidad.

Para evaluar las condiciones, bash tiene un comando integrado llamado "test" . Los corchetes son lo mismo que el comando de prueba, por lo que puede usar el comando de prueba o los corchetes.

$ type -a test
test is a shell builtin
test is /usr/bin/test
test is /bin/test

Hay un montón de operadores soportados por test comando para evaluar las condiciones y veremos cómo usar estos operadores en la próxima sección. Para obtener la lista de operadores, puede ejecutar cualquiera de los siguientes comandos.

$ man test
$ help test

Operadores de prueba de archivos

Los operadores de prueba de archivo se pueden utilizar para trabajar con objetos de archivo o directorio. Usando operadores de prueba de archivos, puede validar si un archivo o directorio dado está presente o no, el objeto dado es un archivo o directorio, qué tipo de archivo está tratando, tamaño del archivo, etc. Ejecute el siguiente comando y busque la sección del operador de archivos.

$ man test

No todos los operadores se usan con frecuencia, pero lo guiaré a través de los más importantes.

Para verificar si un archivo dado está presente o no, use -e bandera. Aquí estoy comprobando si .bashrc el archivo está presente en mi directorio de inicio o no.

if [[ -e /home/${USER}/.bashrc ]]
then
  echo "File is present"
else
  echo "File is not present"
fi

Para verificar si un directorio dado está presente o no, use -d bandera. Aquí estoy buscando el escritorio directorio en mi carpeta de inicio.

if [[ -d ~/Desktop/ ]]
then
  echo "Directory is present"
else
  echo "Directory is not present"
fi

Para comprobar si el archivo tiene un tamaño distinto de cero archivo, use el -s bandera. Aquí, he creado un archivo llamado "zero_byte.txt" y anexó algo de texto.

$ touch ~/Desktop/zero_byte.txt
$ echo "Writing something" >> ~/Desktop/zero_byte.txt
$ if [[ -s ~/Desktop/zero_byte.txt ]]
then
  echo "File is not zero byte"
else
  echo "File is zero byte"
fi

Puedes usar ! símbolo con cualquier bandera que invertirá el resultado. Estoy usando el mismo ejemplo anterior pero con "!" símbolo. Invertirá e imprimirá el archivo como un archivo de cero bytes, aunque no lo sea.

$ if [[ ! -s ~/Desktop/zero_byte.txt ]]
then
  echo "File is not zero byte"
else
  echo "File is zero byte"
fi

Operadores de comparación de enteros

A continuación se encuentran los operadores de comparación de enteros que se evaluarán contra dos enteros dados.

-eq => Integer X is equal to Integer Y
-ne => Integer X is not equal to Integer Y
-gt => Integer X is greater than Integer Y
-ge => Integer X is greater than or equal to Integer Y
-lt => Integer X is lesser than Integer Y
-le => Integer X is lesser than or equal to Integer Y

Cada comando bash devuelve un código de salida entre 0-255 y usaremos los operadores de comparación de enteros para evaluar los códigos de salida. En el siguiente ejemplo, estoy asignando el código de salida de nvim comando a una variable llamada EXCODE y haciendo la comparación de enteros. Dado que neovim no está disponible, arrojará el código de salida 127 (error de comando no encontrado).

$ EXCODE=$(nvim;echo $?)
$ if [[ $EXCODE -eq 0 ]]
then      
  echo "nvim is available to use"
elif [[ $EXCODE -eq 127 ]]
then
  echo "Command not found, check if nvim is installed or not"
else     
   echo "Return code is other than 0 & 127. Check and fix the error"
fi

En el ejemplo anterior, he usado el elif declaración para la primera declaración en este artículo. Primero el "if" se evalúa la condición para comprobar si el código de retorno es cero, que devuelve falso, luego se pasa el control a elif declaración y la condición se evalúa como verdadera y ejecuta el bloque de código. Puede agregar tanto elif declaración para evaluar diferentes condiciones.

También puede evaluar múltiples condiciones en un solo if o elif declaración utilizando el operador lógico AND, OR.

LOGICAL AND ⇒ && symbol => All the conditions should be evaluated to be true.
LOGICAL OR ⇒ || symbol => Anyone condition should be evaluated to be true.

A continuación se muestra un ejemplo de Y lógico operador donde el entero almacenado en las variables X y Y se evalúan como verdaderos .

$ X=10
$ Y=15
$ if [[ $X -eq 10 && $Y -eq 15 ]]
then
  echo "ok to proceed"
else
  echo "Not ok to proceed"
fi

A continuación se muestra el ejemplo de un O lógico operador donde variable X se evalúa como verdadero y variable Y se evalúa como falso .

$ X=10
$ Y=15
$ if [[ $X -eq 10 || $Y -eq 10 ]]
then
  echo "ok to proceed"
else
  echo "Not ok to proceed"
fi

Declaraciones condicionales compactas

Si tienes que escribir un if y else declaración entonces puede usar la forma abreviada. De forma abreviada, no hay necesidad de usar if..then..else..fi palabras clave Puede usar AND lógico (&& ) y OR lógico (|| ) operadores.

[[ condition ]] && << run if condition is evaluated to true >> || << run if condition is evaluated to false >>

Eche un vistazo al siguiente ejemplo. Estoy tratando de verificar si el paquete neofetch está disponible y si no está disponible intentar instalarlo.

$ which neofetch && echo "Neofetch already installed" || sudo apt install neofetch -y

Explicación del código:

  • Ejecutará el "which neofetch" comando y si el código de retorno es cero, lo que viene después de && se ejecutará el operador.
  • Si el código de retorno está por encima de cero (evaluado como falso), lo que venga después de || se ejecutará el operador.
  • Esto es similar al if y else declaración. El "If" La declaración se ejecutará solo si la condición se evalúa como verdadera. En este caso, es Y operador. De manera similar, la cláusula else se ejecutará solo cuando "if" la condición se evalúa como falsa. En este caso, es O operador.
  • En mi máquina, Neofetch ya está instalado, por lo que el código de salida será cero. Ejecutará el echo dominio. Si el neofetch no está instalado, ejecutará apt install comando.

A continuación se muestra otro ejemplo en el que estoy usando el operador de prueba de archivo para verificar si un archivo tiene cero bytes o no.

$ [[ -s ~/.bashrc ]] && echo "Not a empty file" || echo "Empty file"

Operadores de comparación de cadenas

Como Entero y Archivo operadores de prueba, tenemos un conjunto de operadores para trabajar con cadenas. A continuación se muestra el importante conjunto de operadores de cadenas.

-z => Check if string is NULL.
-n => Check if string is not NULL.
== => Check for string equality.
!= => Check for string inequality.

Para verificar si la cadena es NULL o no NULL, use -z y -n bandera. Estoy usando la sintaxis de declaración condicional compacta para evaluar la condición.

$ [[ -z "Howdy" ]] && echo "String is NULL" || echo "String is not NULL"
$ [[ -n "Howdy" ]] && echo "String is not NULL" || echo "String is NULL"

Para verificar si dos cadenas son iguales, use == operador. Las cadenas distinguen entre mayúsculas y minúsculas, por lo que debe ejecutar la comparación teniendo en cuenta este punto.

$ X="Linux"
$ Y="Linux"
$ [[ $X == $Y ]] && echo "Equal" || echo "Not equal"

Para verificar si dos cadenas no son iguales, use != operador.

$ [[ $X != $Y ]] && echo "Not Equal" || echo "Equal"

Conclusión

En este artículo hemos visto cómo trabajar con sentencias condicionales en bash. También hemos visto cómo usar operadores de prueba de archivos, enteros y cadenas. Finalmente, discutimos cómo escribir declaraciones condicionales compactas usando operadores lógicos AND y OR lógicos con ejemplos.

Para cualquier comentario o sugerencia, utilice la sección de comentarios y estaremos encantados de volver.

Guías de secuencias de comandos de Bash:

  • Bash Scripting:manipulación de cadenas
  • Secuencias de comandos de Bash:comando Printf explicado con ejemplos
  • Bash Scripting:matriz indexada explicada con ejemplos
  • Secuencias de comandos de Bash:matriz asociativa explicada con ejemplos
  • Secuencias de comandos de Bash:bucle For explicado con ejemplos
  • Secuencias de comandos de Bash:ciclo while y till explicado con ejemplos
  • Redireccionamiento de Bash explicado con ejemplos
  • Secuencias de comandos de Bash:variables explicadas con ejemplos
  • Bash Scripting:funciones explicadas con ejemplos
  • Comando Bash Echo explicado con ejemplos en Linux
  • Tutorial de Bash Heredoc para principiantes

Linux
  1. Cómo verificar si existe un archivo o directorio en Bash

  2. Bash:escribir en archivo

  3. Bash secuencias de comandos (I)

  4. El Bash'?

  5. ¿No puede ejecutar scripts bash incluso como root?

Bash scripting:cómo leer datos de archivos de texto

Script Bash (II)

Script Bash (III)

Declaraciones If-Else de Bash:todo lo que necesita saber

Bash Beginner Series #5:Uso de operadores aritméticos en Bash Scripting

Comprender Bash If Else y otras declaraciones condicionales