Tutorial Bash II
¡Hola, internauta!
Hoy quiero traerte un tutorial de Bash con contenido más completo, especialmente enfocado en scripting. Porque sí, supongo que para eso estás aquí, ¿no? Para aprender… o quizá solo para reírte un rato con las cosas que se me ocurren decir (aunque qué feo venir solo a reírse de un loquito más). Pero bueno, para eso estoy: para compartir contigo lo mejor de lo mejor. Este es un tutorial que me he sacado de la manga. ¿Que por qué lo hice? Ni yo mismo lo sé a veces, pero aquí estoy, siendo cordial y amigable con ustedes, los que de verdad quieren leerme.
La curiosidad no mata al gato, lo mete en problemas… ¡pero de los interesantes! 😼
Raksodiano
Operadores
En Bash tenemos operadores matemáticos, de comparación y lógicos. Estos nos permiten realizar diversas validaciones según los distintos escenarios que puedan surgir en nuestros scripts. Claro, todo depende de lo que quieras hacer (aunque, si esto te parece mucho, tal vez deberías ir a estudiar humanidades… 😹). Pero si te ves capaz -y yo confío en que sí-, puedes usar estos operadores para crear validaciones tan complejas como tu lógica lo permita. ¿Te animas?
Matemáticos
Usados para realizar operaciones aritméticas básicas.
| Nombre | Operador | Ejemplo |
|---|---|---|
| Suma | + | echo $(( 1 + 1 )) |
| Resta | - | echo $(( 1 - 1 )) |
| Multiplicación | * | echo $(( 2 * 2 )) |
| División | / | echo $(( 10 / 2 )) |
| Módulo | % | echo $(( 5 / 2 )) |
| Potencia | ** | echo $(( 2 ** 3 )) |
| Incremento | ++ | ((x++)) |
| Decremento | – | ((x–)) |
Comparación
Usados para comparar números o cadenas, comúnmente en estructuras.
| Nombre | Operador | Ejemplo |
|---|---|---|
| Igual | -eq | [ “$a” -eq “$b” ] |
| Distinto / No igual | -ne | [ “$a” -ne “$b” ] |
| Menor que | -lt | [ “$a” -lt “$b” ] |
| Menor o igual que | -le | [ “$a” -le “$b” ] |
| Mayor que | -gt | [ “$a” -gt “$b” ] |
| Mayo o igual que | -ge | [ “$a” -ge “$b” ] |
Lógicos
Permiten combinar múltiples condiciones.
| Nombre | Operador | Ejemplo |
|---|---|---|
| Negación | ! | [ ! “$a” = “$b” ] |
| AND (un “y” lógico) | -a | [ “$a” -gt 5 -a “$b” -lt 10 ] |
| OR (un “o” lógigo) | -o | [ “$a” -gt 5 -o “$b” -lt 10 ] |
Condicionales
Estos operadores permiten que tus scripts tomen decisiones basadas en si una condición es verdadera o falsa, dependiendo del resultado de la evaluación definida.
if
El comando if en Bash, que podríamos traducir como un “si”, se utiliza para evaluar condiciones dentro de un script. Básicamente, es como hacer una pregunta: “¿Esto es sensual?” Si la respuesta es verdadera, entonces se ejecuta el bloque de código que está dentro del if. De lo contrario, el script sigue por otro camino.
La sintaxis básica de un if en Bash es la siguiente:
| |
Aquí tienes un ejemplo de script para ver cómo funcionaría todo lo que hemos visto hasta ahora. Puedes copiar este código, pegarlo en un archivo (por ejemplo, mi_sensual_script.sh) y ejecutarlo desde la terminal. Así podrás practicar con algunos de los conceptos que ya repasamos en el tutorial anterior:
| |
else
El else se traduce como el “sino”, y nos permite ejecutar otro bloque de código cuando la condición anterior no se cumple. Como puedes ver en la sintaxis, el else forma parte del bloque del if.
| |
Ahora vamos a usarlo un poco, para que puedas ver qué ocurre cuando seguimos otro camino, siempre por el buen camino, nada de esos caminos oscuros 😏.
| |
elif
El elif se utiliza para evaluar una nueva condición, lo que nos permite validar múltiples condiciones de manera secuencial. Además, puede anidarse tantas veces como sea necesario, dándonos la posibilidad de tomar más de una decisión dentro de un mismo bloque.
| |
Podemos ver el uso del mismo así, sin miedo a equivocarnos, ¡que el elif está para eso, para probar todas las opciones hasta dar con la correcta!, Aunque, ojo, no te pases de “probadita” 😼.
| |
case
El case se puede definir como una estructura de control utilizada para realizar la comparación de patrones. Dentro de esta estructura, solo puedes definir una variable y los diferentes valores que puede tomar, ya que no valida operadores.
| |
Podemos hacer uso del mismo de esta forma, sin miedo, que el case está para hacer comparaciones, no para juzgarte… mucho… 😼
| |
gato, perro y oso. Cualquier otra combinación de caracteres, como Gato, GATO o cualquier variación, no será reconocida, ya que la comparación es sensible… a mayúsculas y minúsculas.Bucles
Son estructuras que te permiten ejecutar un bloque de comandos repetidamente, mientras se cumpla cierta condición. Estas estructuras son muy útiles cuando necesitas automatizar tareas repetitivas o recorrer elementos sin tener que escribir el mismo código una y otra vez.
For
Sirve para recorrer una lista o un rango, ejecutando el mismo bloque de código para cada elemento. Esto nos permite procesar un conjunto finito de valores de forma ordenada y eficiente, sin tener que escribir una instrucción para cada uno.
| |
Podemos tener varios usos, por ejemplo, recorrer una lista o un rango. Así que aquí tienes este par de ejemplos;
Lista
| |
Rango
| |
While
Este se usa cuando no sabemos cuántas veces debe repetirse el bloque de código, pero queremos que se ejecute mientras se cumpla una determinada condición. Justamente por eso se llama while, que se traduce como “mientras”, indicando que el código se seguirá ejecutando “mientras” la condición sea verdadera.
| |
Hagamos un ejemplo más donde realicemos un conteo de números, y que al llegar a uno específico se detenga. Piensa en esto como: “Mientras sea menor o igual que 10, se ejecuta”.
| |
Until
El until es similar al while, pero se puede traducir como “hasta”, por lo que la lógica detrás de su uso es un poco diferente. En lugar de ejecutarse mientras la condición sea verdadera, como en while, el bloque de código en until se ejecuta “hasta” que la condición se vuelva verdadera.
| |
Veamos un ejemplo para entenderlo mejor. Piensa en esto como: “Hasta que sea mayor o igual que 11”, el código se seguirá ejecutando.
| |
Bucles infinitos
Ten presente que con todos los bucles que hemos visto hasta ahora pueden surgir problemas de bucles infinitos, es decir, aquellos que se ejecutan de manera indefinida si no se controla bien la condición. Por eso, es importante tener cuidado al escribirlos. Afortunadamente, contamos con dos grandes aliados: break y continue, que nos ayudan a controlar mejor la ejecución dentro de los bucles.
Break
Veamos el siguiente ejemplo: si definimos una condición que siempre sea verdadera, podemos provocar un bucle infinito. Para evitarlo, usamos break, que nos permite forzar la salida del bucle cuando se cumpla cierta condición.
En el siguiente ejemplo, trata de eliminar el bloque if completo, verás que el bucle se ejecutará infinitamente.
Para detenerlo, solo dile: “¡Zorro, no te lo lleves!”… ah no, así no era. ¿Cómo era?… ¡Ah, ya me acordé! Es Ctrl + C 😅.
| |
Continue
En algunos casos necesitaremos que el bucle salte cierta iteración bajo una condición específica. Para eso podemos usar continue, que nos permite omitir esa vuelta del bucle y pasar directamente a la siguiente. Esto puede ser útil para evitar casos que no nos interesan o incluso para prevenir un posible bucle infinito si no se cumplen ciertas condiciones dentro del ciclo.
Número: 5, ya que la saltamos y le sumamos uno al contador en ese punto. Es como cuando te saltas los anuncios con bloqueadores, ¡ni te das cuenta y sigues disfrutando sin interrupciones! 😆… hasta que te bloquean como a mí. 😢 | |
Sí ves la salida de este script, no saldrá la linea Número: 5, esto porque la saltamos e hicimos que se le sumara uno al contador.
echo “Bye bye”
.sh y ¡listo!Bueno, como palabras finales, quiero dejar en claro que este post está escrito con un tono de humor algo curioso y raro, pero con la alegría genuina de poder enseñarte de una forma más amena.
Espero que este contenido te sea útil, ya que mi objetivo es que puedas practicar con el tiempo y desarrollar la curiosidad para investigar e indagar más sobre lo que te interesa. Tal vez estás aquí solo por entretenimiento, y te agradezco que lo estés.
Me gustaría que te sientas cómodo leyendo algo que, además de informarte, te saque una sonrisa. No todo tiene que ser tratado con rigor y seriedad, también podemos disfrutar de contenido que, aunque a veces parezca aburrido o poco interesante, sabemos que es necesario aprender.
Así que nada… vamos improvisando sobre la marcha.
🙏 Pensamiento final
Que San Ignucio te proteja del
software privativo,
que tus scripts siempre encuentren suPATH,
y que jamás te falte un buengreppara encontrar sentido entre las líneas.Recuerda:
“Benditos sean los que comparten sucódigo, porque de ellos será el reino delsoftware libre”¡Nos leemos pronto, con terminal abierta y corazón libre! 🐧✨