Estructuras Condicionales con if
La sintaxis básica para una sentencia if en bash es la siguiente:
if [ condición ]; then
comandos
fi
O en forma extendida:
if [ condición ]
then
comandos
fi
Consideraciones importantes:
- Debe haber un espacio entre los corchetes y la condición.
- Después de "if" se requiere un espacio.
Ejemplo práctico: Determinar si un número es par o impar.
#!/bin/bash
numero=$1
if [ $((numero % 2)) -eq 0 ]
then
echo "El número $numero es par."
else
echo "El número $numero es impar."
fi
Para ejecutar, asignar permisos y pasar un argumento:
chmod +x par_impar.sh
./par_impar.sh 4
Conmutador con case
La estructura case permite ejecutar bloques de código según el valor de una variable.
case $variable in
patrón1)
comandos1
;;
patrón2)
comandos2
;;
*)
comandos_por_defecto
;;
esac
Reglas de sintaxis:
- La línea de case debe terminar con "in".
- Cada patrón se cierra con ")" y los comnados terminan con ";;".
- El asterisco "*" actúa como comodín para el caso por defecto.
Ejemplo: Menú interactivo para seleccionar una opción.
#!/bin/bash
echo "Seleccione una opción:"
echo "1. Mostrar fecha actual"
echo "2. Listar archivos en el directorio actual"
echo "3. Salir"
read opcion
case $opcion in
1)
fecha=$(date)
echo "Fecha y hora: $fecha"
;;
2)
ls -la
;;
3)
echo "Saliendo del script."
exit 0
;;
*)
echo "Opción no válida."
;;
esac
Ejecución:
chmod +x menu_case.sh
./menu_case.sh
Bucles con for
Sintaxis aritmética
Para iterar con un contador definido:
for (( inicialización; condición; incremento ))
do
comandos
done
Ejemplo: Calcular la suma de los primeros 20 números naturales.
#!/bin/bash
total=0
for (( contador=1; contador<=20; contador++ ))
do
total=$((total + contador))
done
echo "La suma es: $total"
Guardado como suma_for.sh y ejeuctado con bash suma_for.sh.
Sintaxis de iteración sobre lista
Para recorrrer una serie de valores o argumentos:
for variable in lista_valores
do
comandos
done
Ejemplo: Procesar los argumentos pasados al script, diferenciando entre "$*" y "$@".
#!/bin/bash
echo "Iterando con \$*:"
for item in $*
do
echo "Elemento: $item"
done
echo "Iterando con \$@:"
for elemento in $@
do
echo "Elemento: $elemento"
done
Cuando se encierran en comillas dobles, "$*" trata todos los parámetros como una sola cadena, mientras que "$@" los conserva como elementos separados.
#!/bin/bash
echo "Con \$* entre comillas:"
for parte in "$*"
do
echo "Cadena completa: $parte"
done
echo "Con \$@ entre comillas:"
for segmento in "$@"
do
echo "Segmento individual: $segmento"
done
Ejecución con múltiples argumentos: bash argumentos.sh uno dos tres.
Bucle while
El bucle while ejecuta comandos mientras se cumpla una condición.
while [ condición ]
do
comandos
done
Ejemplo: Contar los divisores de un número ingresado.
#!/bin/bash
numero=12
divisor=1
contador=0
while [ $divisor -le $numero ]
do
if [ $((numero % divisor)) -eq 0 ]
then
contador=$((contador + 1))
fi
divisor=$((divisor + 1))
done
echo "El número $numero tiene $contador divisores."
Para ejecutarlo: chmod +x divisores.sh && ./divisores.sh.
Lectura de Entrada desde la Consola con read
El comando read permite capturar datos del usuario durante la ejecución.
read [opciones] [variable]
Opciones comunes:
-p "mensaje": Muestra un mensaje antes de leer.-t segundos: Establece un tiempo de espera para la entrada.
Ejemplo: Solicitar un nombre de usuario con un límite de tiempo.
#!/bin/bash
read -t 10 -p "Ingrese su nombre de usuario (10 segundos): " usuario
if [ -n "$usuario" ]
then
echo "Bienvenido, $usuario."
else
echo "No se ingresó ningún nombre."
fi
Guardar como leer_usuario.sh y ejecutar con bash leer_usuario.sh.