En programación, las estructuras son formas de organizar y controlar el flujo de un programa, existen varios tipos de estructuras:
Estructuras secuenciales: Son instrucciones que se ejecutan una tras otra, en secuencia, de arriba hacia abajo. Es el flujo de ejecución más básico.
Estructuras de selección (condicionales): Permiten tomar decisiones basadas en condiciones específicas. Los condicionales más comunes son if, if-else, if-elseif-else, switch, entre otras.
Estructura de repetición (bucles o ciclos): Nos permiten ejecutar un bloque de código repetidamente mientras se cumpla una condición.
La programación en la shell ofrece una herramienta poderosa para la automatización de tareas, permitiendo a los usuarios optimizar su flujo de trabajo mediante la creación de scripts. Estos archivos contienen una secuencia de comandos que pueden ejecutarse de manera consecutiva con una sola instrucción, lo que resulta especialmente útil tanto para operaciones repetitivas como para aquellas que se realizan con poca frecuencia y cuya sintaxis podría ser difícil de recordar. Además de mejorar la eficiencia y reducir la carga de trabajo manual, el uso de scripts minimiza el riesgo de errores humanos y garantiza la consistencia en la ejecución de procesos. Gracias a su flexibilidad y rendimiento, la shell se convierte en una aliada indispensable para administradores de sistemas, desarrolladores y cualquier usuario que desee automatizar tareas en su entorno.
En la programación con shell, el uso de estructuras de control como las repetitivas y condicionales permite desarrollar scripts dinámicos y versátiles. Los bucles for y while facilitan la ejecución iterativa de comandos, mientras que las estructuras condicionales if permiten la toma de decisiones en función de distintas condiciones.
A pesar de la aparente complejidad que pueden adquirir ciertos scripts, en esencia, toda lógica se basa en combinaciones de repeticiones y condiciones. Una particularidad del shell, en contraste con lenguajes como C o Java, es su convención inversa en la evaluación de valores booleanos: el valor 0 representa verdadero (true), mientras que cualquier otro valor indica falso (false).
Esta convención surge de la naturaleza de los comandos en shell, que retornan 0 cuando se ejecutan correctamente y valores distintos de 0 en caso de error. Además, para establecer condiciones dentro de los scripts, se pueden utilizar los comandos true y false, que devuelven explícitamente estos valores y permiten construir estructuras de control más claras y manejables.
REPASO DE ESCTRUCTURA IF
En Bash, la estructura if se utiliza para evaluar condiciones y ejecutar comandos en función del resultado. Su sintaxis básica es la siguiente
if [ condición ]; then
# Comandos si la condición es verdadera
fi
O también:
if [ condición ]; then
# Comandos si la condición es verdadera
else
# Comandos si la condición es falsa
fi
También podemos incluir múltiples condiciones con elif:
if [ condición1 ]; then
# Comandos si la condición1 es verdadera
elif [ condición2 ]; then
# Comandos si la condición2 es verdadera
else
# Comandos si ninguna condición es verdadera
fi
Ejemplo 1: Comparación de números
#!/bin/bash
read -p "Ingrese un número: " num
if [ $num -gt 10 ]; then
echo "El número es mayor que 10."
else
echo "El número es 10 o menor."
fi
Ejemplo 2: Comparación de cadenas
#!/bin/bash
read -p "Ingrese 'si' o 'no': " respuesta
if [ "$respuesta" == "si" ]; then
echo "Usted ha respondido afirmativamente."
elif [ "$respuesta" == "no" ]; then
echo "Usted ha respondido negativamente."
else
echo "Respuesta no válida."
fi
Comparación de números
| Operador | Significado |
|---|---|
-eq | Igual (==) |
-ne | No igual (!=) |
-gt | Mayor (>) |
-lt | Menor (<) |
-ge | Mayor o igual (>=) |
-le | Menor o igual (<=) |
Comparación de cadenas
| Operador | Significado |
|---|---|
== | Igual |
!= | No igual |
-z | Cadena vacía |
-n | Cadena no vacía |
Verificación de archivos y directorios
| Operador | Significado |
|---|---|
-f | ¿Es un archivo regular? |
-d | ¿Es un directorio? |
-e | ¿Existe? |
-r | ¿Tiene permisos de lectura? |
-w | ¿Tiene permisos de escritura? |
-x | ¿Es ejecutable? |
REPASO DE ESTRUCTURA FOR
El bucle for en Bash se usa para iterar sobre una lista de valores o un rango de números. Es útil para repetir una serie de comandos un número determinado de veces sin necesidad de escribirlos manualmente.
Iteración sobre una lista de valores
for variable in lista_de_valores; do
# Comandos a ejecutar
done
Ejemplo:
#!/bin/bash
for nombre in Ana Juan Pedro María; do
echo "Hola, $nombre"
done
Iteración sobre un rango de números
for i in {1..5}; do
echo "Número: $i"
done
También se puede agregar un paso usando {inicio..fin..paso}
for i in {1..10..2}; do
echo "Valor: $i"
done
Otra forma de generar un rango es usando seq.
for i in $(seq 1 2 10); do
echo "Iteración: $i"
done
Iteración sobre archivos en un directorio
for archivo in *.txt; do
echo "Procesando archivo: $archivo"
done
Usando for con C-style (similar a C, Java, etc.)
for ((i=1; i<=5; i++)); do
echo "Iteración número $i"
done
RESUMEN
Forma de for | Ejemplo |
|---|
| Lista de valores | for i in rojo verde azul; do echo $i; done |
| Rango de números | for i in {1..5}; do echo $i; done |
seq | for i in $(seq 1 2 10); do echo $i; done |
| Archivos en directorio | for archivo in *.txt; do echo $archivo; done |
| Estilo C | for ((i=1; i<=5; i++)); do echo $i; done |
break | Detiene el bucle en cierta condición |
continue | Salta una iteración y sigue con la siguiente |
El bucle for en Bash es muy flexible y se puede usar para recorrer listas, rangos, archivos y más. Dependiendo del caso, podemos elegir la sintaxis que mejor se adapte a nuestro propósito.
REPASO DE ESTRUCTURA WHILE
El bucle while en Bash permite ejecutar un bloque de código mientras una condición sea verdadera. Es útil cuando no sabemos cuántas veces se ejecutará el código, ya que depende de una condición en tiempo de ejecución.
while [ condición ]; do
# Comandos a ejecutar
done
La condición se evalúa antes de cada iteración.
Si la condición es true, el bucle sigue ejecutándose.
#!/bin/bash
contador=1
while [ $contador -le 5 ]; do
echo "Iteración $contador"
((contador++)) # Incrementar contador
done
El while es útil para mantener programas interactivos hasta que el usuario introduzca un valor específico.
#!/bin/bash
opcion=""
while [ "$opcion" != "salir" ]; do
echo "Escribe algo (o 'salir' para terminar):"
read opcion
echo "Ingresaste: $opcion"
done
echo "Programa finalizado."
Uso con archivos (Leer línea por línea)
#!/bin/bash
while IFS= read -r linea; do
echo "Línea: $linea"
done < archivo.txt
Explicación:
IFS=evita quereadelimine espacios en blanco.-revita que\se interprete como carácter especial.- Se lee el archivo
archivo.txtlínea por línea.
Uso con break y continuebreak → Termina el bucle inmediatamente.continue → Salta la iteración actual y sigue con la siguiente.
Ejemplo con break
contador=1
while [ $contador -le 10 ]; do
if [ $contador -eq 5 ]; then
echo "Se detiene en $contador"
break
fi
echo "Número: $contador"
((contador++))
done
Ejemplo con continue
contador=0
while [ $contador -lt 5 ]; do
((contador++))
if [ $contador -eq 3 ]; then
echo "Salta el número $contador"
continue
fi
echo "Número: $contador"
done
El while también es útil para hacer pausas o contadores regresivos.
#!/bin/bash
segundos=5
while [ $segundos -gt 0 ]; do
echo "Tiempo restante: $segundos segundos"
sleep 1
((segundos--))
done
echo "¡Tiempo terminado!"
RESUMEN
Uso de while | Ejemplo |
|---|
| Contador simple | while [ $i -le 5 ]; do echo $i; ((i++)); done |
| Leer entrada de usuario | while [ "$opcion" != "salir" ]; do read opcion; done |
| Leer archivo línea a línea | while IFS= read -r linea; do echo $linea; done < archivo.txt |
| Esperar conexión a Internet | while ! ping -c 1 google.com &> /dev/null; do sleep 2; done |
break (salir del bucle) | if [ $i -eq 5 ]; then break; fi |
continue (saltar iteración) | if [ $i -eq 3 ]; then continue; fi |
| Temporizador | while [ $segundos -gt 0 ]; do sleep 1; ((segundos--)); done |
La estructura case en Bash permite evaluar una variable o expresión y ejecutar diferentes bloques de código según su valor. Es una alternativa más elegante y clara que múltiples sentencias if-elif-else cuando hay muchas condiciones posibles.
case variable in
patron1)
# Comandos a ejecutar si la variable coincide con patron1
;;
patron2)
# Comandos a ejecutar si la variable coincide con patron2
;;
*)
# Comandos a ejecutar si no coincide con ningún patrón (opcional)
;;
esac
- Cada patrón termina con
) - Cada bloque de comandos termina con
;;para evitar que el programa siga ejecutando otros casos. - El caso
*actúa como «default» si ninguna condición se cumple.
#!/bin/bash
echo "Elige una opción: (1-3)"
read opcion
case $opcion in
1)
echo "Elegiste la opción 1"
;;
2)
echo "Elegiste la opción 2"
;;
3)
echo "Elegiste la opción 3"
;;
*)
echo "Opción no válida"
;;
esac
El case no solo funciona con números, sino también con cadenas de texto.
#!/bin/bash
echo "Ingrese un color:"
read color
case $color in
rojo)
echo "El color rojo representa la pasión."
;;
azul)
echo "El color azul representa la tranquilidad."
;;
verde)
echo "El color verde representa la naturaleza."
;;
*)
echo "No conozco ese color."
;;
esac
Uso con múltiples valores en una sola opción
#!/bin/bash
echo "Ingrese una fruta:"
read fruta
case $fruta in
manzana|pera|durazno)
echo "Es una fruta de árbol."
;;
banana|plátano)
echo "Es una fruta tropical."
;;
uva|sandía|melón)
echo "Es una fruta de viña o enredadera."
;;
*)
echo "No reconozco esa fruta."
;;
esac
Otra opción:
#! /bin/bash
clear
PS3="Introduce una opción: "
select opcion in "1" "2" "3" "4"; do
case $opcion in
1) echo "Opcion 1" ;;
2) echo "Opcion 2" ;;
3) echo "Opcion 3" ;;
4) echo "Adios"; break ;;
*) echo "No has introducido un valor correcto" ;;
esac
done
Menú de ejemplo para proyectos
#!/bin/bash
#Script de usuarios
#*************VARIABLES GLOBALES*********
opc=0
#****************************************
#**************FUNCIONES*****************
function menu(){
echo "MENU"
echo "1 - Agregar usuario"
echo "2 - Listar usuarios"
echo "3 - Buscar usuarios"
echo "4 - Borrar usuarios"
echo "5 - Bloquear usuario"
echo "6 - Desbloquear usuario"
echo "7 - Cambiar contraseña"
echo "8 - Volver"
echo "Ingrese una opcion: "
}
#***************MAIN**********************
while [ $opc -ne 8 ];
do
menu
read -p "Ingrese una opción: " opc
case $opc in
1)
echo "OPCIÓN 1 - ALTA DE USUARIOS" ;
altaUsuario;;
2) echo "OPCIÓN 2 - LISTAR USUARIOS" ;;
3) echo "OPCIÓN 3 - " ;;
4) echo "OPCIÓN 4 - " ;;
5) echo "OPCIÓN 5 - " ;;
6) echo "OPCIÓN 6 - " ;;
7) echo "OPCIÓN 7 - " ;;
8) echo "OPCIÓN 8 - Hasta luego " ; break ;;
*) echo "OPCIÓN POR DEFECTO - " ;;
esac
done
#*****************************************








Deja un comentario