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:
- 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. - 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. - 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. - Si todos los
if
oelif
el bloque se evalúa como falso luego el bloque de código de"else"
se ejecutará la cláusula. - 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
yelse
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