De la estructura clásica a la potencia del "cortocircuito" en BASH.
En BASH, existen muchas formas de tomar decisiones.
En este artículo, vamos a hacer un breve "viaje" desde la estructura más básica del "if" hasta una técnica avanzada y compacta que verás en los scripts que más experiencia acumulada encierran: el operador de "cortocircuito".
1. Punto de partida: el "if" básico.
Todo estudiante comienza por aquí. Es la forma más legible y segura de ejecutar algo si se necesita verificar el cumplimiento de una condición.
# Si el archivo existe, notificarlo.
if [[ -f "$archivo" ]];then
echo "El archivo existe."
fi
2. Agregando alternativas: "else" y "elif".
En cuanto el script comienza a crecer, es necesario empezar a manejar el "qué pasa si no", y aquí es en donde entran en escena los actores "else" (si no) y "elif" (y si).
if [[ -f "$archivo" ]];then
echo "Es un archivo regular."
elif [[ -d "$archivo" ]];then
echo "Es un directorio."
else
echo "No se encontró nada con ese nombre."
fi
3. El salto al minimalismo: operadores && y { }
A veces, podemos juzgar que un bloque "if" de 5 líneas para una tarea muy pequeña está ocupando "demasiado espacio visual", y es este tipo de situación el origen del código compacto, utilizando, entre otras herramientas, al operador "&&" (AND).
En BASH, el "&&" le dice al sistema: "ejecutá lo que sigue SOLO SI la operación anterior terminó con éxito".
Si solo querés ejecutar un comando, la cuestión es simple:
[[ -f "$archivo" ]] && echo "Existe."
¿Te vas dando cuenta de cómo funciona esto?
Ahora... ¿qué pasa si querés ejecutar varios comandos en una sola línea?
Para esto mismo es que están las llaves "{}", las cuales se pueden utilizar en combinación con "&&" (AND - "si esto es cierto, hacé lo siguiente") y "||" (OR - "si lo anterior falló, hacé esto").
[[ -f "$archivo" ]] && { echo "Es un archivo regular."; exit; }
[[ -d "$archivo" ]] && { echo "Es un directorio."; exit; }
echo "No se encontró nada con ese nombre."
Este código es equivalente al "if" completo (if/else/elif/fi) de más arriba
Son 3 líneas en comparación con 7: menos de la mitad,
Y podemos llevarlo al extremo "oneliner", que es una técnica que yo usaba mucho cuando programaba en BASIC, hace muchos años atrás:
[[ -f "$archivo" ]] && { echo "Es un archivo regular."; exit; };[[ -d "$archivo" ]] && { echo "Es un directorio."; exit; };echo "No se encontró nada con ese nombre."
Una sola línea. ¿Qué me contás?
Reglas de oro para usar las llaves.
- Espacios obligatorios: siempre debe haber un espacio después de { y antes de }
- El punto y coma final: el último comando dentro de las llaves debe terminar en punto y coma antes de cerrar la llave, para que BASH sepa que el bloque terminó. Esto no es como lo grotesco de Java, al que hay que estar avisándole en cada línea que la línea se terminó, poniendo SIEMPRE ";". Esto en BASH significa "se terminó la línea", pero NO ES OBLIGATORIO, y de hecho, se usa extremadamente poco.
¿Cuándo utilizar cada estilo?
Debes utilizar el "if/elif/else/fi" tradicional cuando se trate de una lógica compleja o estés escribiendo un script que otros (o vos mismo en el futuro) necesiten leer con total claridad y sin andar interpretando "código barroco".
Te recomiendo que, si vas a utilizar este método de "&&", "||" y llaves "{ ...; }", lo hagas ante una validación rápida y corta. Ahorra mucho espacio y, una vez que te acostumbrás a leerlo, hace que tu código se vea mucho más dinámico y fluido.

0 Comentarios:
Publicar un comentario