Programar en Bash puede ser divertido a veces. Saber cómo separar tus if de tus else-if o elif, como se les llama en Bash, además puede ser divertido. Descubra cómo acertar con sus condicionales Bash.
Bash Conditionals: if, then, else, elif
Tan bueno como todos los lenguajes de codificación, existen condicionales – declaraciones condicionales que posibilitan probar una gama de situaciones. En la mayoría de los lenguajes de programación, un básico if
La declaración permitiría probar el estado o el valor de una variable de programación dada. A modo de ejemplo, se podría probar si una variable está vacía o no.
Para obtener más información sobre las variables Bash, es factible que desee revisar nuestro post Funciones Bash y Variables locales.
Bash es un shell de Linux en toda regla y un lenguaje de programación completo. Además incluye muchas extensiones a las declaraciones condicionales más comunes dentro de su lenguaje de programación / scripting. A modo de ejemplo, uno puede probar la presencia de archivos, para ver si un grep -q
declaración fue exitosa y así sucesivamente.
Al mismo tiempo, uno puede especificar declaraciones condicionales complejas, e inclusive subcapas dentro de la if
etc. declaración condicional propiamente dicha. Esto hace que Bash sea muy adecuado para la manipulación / manipulación de big data, el análisis de texto y muchas otras tareas similares a DevOps.
Este post se centrará principalmente en obtener los condicionales correctos, usando if...then
, else
, y elif
declaraciones. Un post futuro analizará condiciones de prueba más complejas, usando subcapas dentro de declaraciones condicionales, etc.
Prueba condicional de Bash: si … entonces … fi
Escribir una declaración condicional en Bash es fácil y sencillo. Inclusive puede escribirlos de forma directa en la línea de comando de Bash, sin utilizar un script:
if [ "1" == "1" ]; then echo 'true'; fi
El resultado es cierto, como 1
partidos 1
. Tenga en cuenta que la forma de probar la igualdad entre los ítems es utilizar ==
y no =
. Este es el caso en muchos idiomas y, a menudo, se hace para evitar o separar claramente de la “asignación” (dicho de otra forma, determinar una variable en un valor dado).
Tenga en cuenta además que terminamos cada condicional if
declaración con una terminación fi
(el reverso de si) declaración. Esto nos posibilita especificar varias líneas después de entonces. then
cláusula antes de terminar el posteriormente sección.
Prueba condicional de Bash: demás Y variables
Pongamos esto en un pequeño script, agreguemos un else
sección y agregue algunas comprobaciones de variables.
Definimos test.sh
como sigue:
#!/bin/bash VAR1=1 VAR2=1 if [ "${VAR1}" == "${VAR2}" ]; then echo 'true' else echo 'false' fi
Posteriormente, hacemos que este pequeño script sea ejecutable emitiendo chmod +x test.sh
que establece la bandera ejecutable para el test.sh
texto.
Dentro del guión que establecimos VAR1
y VAR2
al valor de 1. A continuación, emitimos una declaración if que compara las dos variables, y hacemos eco true
si la comparación es válida, y false
si la comparación fallaba. El resultado es un correcto true
producción.
Prueba condicional de Bash: si Anidamiento y comprobaciones avanzadas
Podemos expandir el último ejemplo un poco más y verificar la desigualdad usando !=
en lugar de ==
, agregue bucles anidados y use algunas comprobaciones de variables avanzadas nativas de Bash al mismo tiempo.
Definimos test2.sh
como sigue:
#!/bin/bash VAR1="${1}" VAR2="${2}" if [ ! -z "${VAR1}" -a ! -z "${VAR2}" ]; then if [ "${VAR1}" != "${VAR2}" ]; then echo 'true' else echo 'false' fi else echo "Assert: Either VAR1 (value: '${VAR1}'), or VAR2 (value: '${VAR2}'), or both, are empty!" fi
En este script, reemplazamos nuestros valores codificados de 1
para ambos VAR1
y VAR2
con dos variables especiales a saber ${1}
y ${2}
, que representan la primera y segunda opción / parámetro, pasado de la línea de comando al script. Hacemos que nuestro script sea ejecutable nuevamente y lo ejecutamos con varias combinaciones de alternativas incorrectas.
los -z
el código significa chequear si un parámetro está vacío o no. Negamos el resultado (dicho de otra forma, el sí se convierte en no y el no se convierte en sí, o mejor dicho / mejor, verdadero se torna falso y falso se convierte en verdadero) a través de el uso de un signo de exclamación (!
) en frente de -z
cheque. Posteriormente además usamos un Y cláusula (dicho de otra forma, ambos lados de la Y cláusula tiene que probarse verdadera).
Dicho de otra forma, la forma en que podías leer el if [ ! -z "${VAR1}" -a ! -z "${VAR2}" ];
la línea en lenguaje natural es Tanto VAR1 como VAR2 no deben estar vacíos. Podemos ver que nuestras variables están siendo verificadas correctamente por esta declaración condicional, dado que cada vez que intentamos pasar solo una variable, o dos variables donde una está vacía, el programa salta a la else
cláusula que informa sobre el uso incorrecto de nuestra opción de script.
En conclusión, dentro de la primera if
declaración condicional, tenemos una secundaria (jerga informática: anidado) sentencia condicional. Esta declaración verifica nuestra desigualdad usando no es igual (!=
). Efectivamente, cuando pasamos dos valores diferentes, a saber 1
y 2
para el script, el resultado es verdadero: estos números son desiguales.
Prueba condicional de Bash: elif
Cuando comience a desarrollar declaraciones más complejas y profundamente anidadas en Bash, pronto encontrará que hay un caso en el que se está ramificando cada vez más profundamente en el código anidado, y el código comienza a parecer más complejo debido a las múltiples capas de profundidad. A menudo, aún cuando no siempre, se puede usar un elif
declaración en tales casos. A modo de ejemplo:
#!/bin/bash if [ "${1}" -lt 2 ]; then echo "less than 2" else if [ "${1}" -lt 4 ]; then echo "less than 4" else if [ "${1}" -lt 6 ]; then echo "less than 6" fi fi fi if [ "${1}" -lt 2 ]; then echo "less than 2" elif [ "${1}" -lt 4 ]; then echo "less than 4" elif [ "${1}" -lt 6 ]; then echo "less than 6" fi
Habiendo definido este script como test3.sh, lo hacemos ejecutable y lo ejecutamos.
Los dos bloques de código hacen exactamente lo mismo: comprueban si el valor pasado como primera opción al script (1, 3 y 5 respectivamente) es menor que (-lt
) Los valores 2, 4 y 6 en secuencia. Vemos que los dos bloques funcionan exactamente igual.
A pesar de esto, el segundo bloque de código, que emplea el uso de elif
declaraciones (que además se pueden leer como si no declaraciones) en lugar de más … si bloques de instrucciones condicionales. El segundo bloque de código no solo es más corto, además es más limpio, más claro y más agradable a la vista. Tenga en cuenta que además puede combinar else
y elif
declaraciones en combinación, de forma anidada, etc.
Conclusión
Escribir código Bash es, fue y probablemente será durante bastante tiempo un ejercicio agradable para muchos. La creación de declaraciones condicionales bien elaboradas es una parte integral y común de esto. En este breve tutorial, analizamos if
, then
, else
, elif
y fi
declaraciones. Usando las diversas declaraciones condicionales, podrá crear un código excelente y limpio. ¡Disfrutar!