sábado, 7 de marzo de 2026

10 Ejercicios Resueltos de Bash Scripting en Linux: Guía para Universidad

Bienvenidos de nuevo a larebelion.com. Si estás cursando Sistemas Operativos o Administración de Sistemas, sabrás que la interfaz gráfica es para cobardes. Un verdadero Ingeniero Informático se mueve por la terminal de Linux como pez en el agua.

Para ayudarte a superar tus exámenes prácticos, hemos recopilado 10 ejercicios esenciales de Bash Scripting de distintas universidades españolas. Desde condicionales básicos hasta automatización de copias de seguridad. ¡Abre tu terminal y empecemos!




1. Comprobación de Archivos (UPM)

Enunciado: Crea un script que reciba el nombre de un archivo por parámetro y compruebe si existe y si tiene permisos de lectura.

#!/bin/bash
ARCHIVO=$1

if [ -r "$ARCHIVO" ]; then
    echo "El archivo existe y se puede leer."
else
    echo "El archivo no existe o no hay permisos."
fi

2. Bucle For: Renombrado Masivo (UPC)

Enunciado: Escribe un script que busque todos los archivos con extensión .txt en el directorio actual y les añada la extensión .bak al final.

#!/bin/bash
for archivo in *.txt; do
    if [ -e "$archivo" ]; then
        mv "$archivo" "$archivo.bak"
        echo "Renombrado: $archivo a $archivo.bak"
    fi
done

3. Bucle While: Leer un Fichero Línea a Línea (UGR)

Enunciado: Lee el contenido del archivo /etc/passwd e imprime solo los nombres de los usuarios (la primera palabra antes de los dos puntos).

#!/bin/bash
while IFS=: read -r usuario resto; do
    echo "Usuario encontrado: $usuario"
done < /etc/passwd

4. Operaciones Aritméticas Básicas (UCM)

Enunciado: Crea un script que pida al usuario dos números por teclado y muestre la suma, resta y multiplicación de ambos.

#!/bin/bash
read -p "Introduce el primer número: " num1
read -p "Introduce el segundo número: " num2

suma=$((num1 + num2))
resta=$((num1 - num2))
multi=$((num1 * num2))

echo "Suma: $suma | Resta: $resta | Multiplicación: $multi"

5. Estructura Case: Menú Interactivo (UV)

Enunciado: Implementa un menú sencillo usando case que permita elegir entre ver la fecha actual, ver el espacio en disco o salir del script.

#!/bin/bash
echo "1. Ver Fecha 2. Espacio Disco 3. Salir"
read -p "Elige una opción: " opcion

case $opcion in
    1)
        date ;;
    2)
        df -h ;;
    3)
        echo "Saliendo..."; exit 0 ;;
    *)
        echo "Opción no válida." ;;
esac

6. Funciones en Bash: Factorial (UC3M)

Enunciado: Crea una función recursiva o iterativa en Bash que calcule el factorial de un número pasado como argumento.

#!/bin/bash
factorial() {
    n=$1
    if [ $n -le 1 ]; then
        echo 1
    else
        prev=$(factorial $((n - 1)))
        echo $((n * prev))
    fi
}

echo "Factorial de 5 es: $(factorial 5)"

7. Uso de AWK: Filtrar Procesos (US)

Enunciado: Ejecuta el comando ps aux y usa awk para imprimir solo el PID (columna 2) y el comando (columna 11) de los procesos que pertenecen al usuario 'root'.

#!/bin/bash
# Filtramos por root y usamos awk para formatear la salida
ps aux | awk '$1 == "root" {print "PID: " $2 " -> CMD: " $11}' | head -n 10

8. Automatización: Copia de Seguridad Simple (UAM)

Enunciado: Crea un script que comprima la carpeta /var/log en un archivo tar.gz. El nombre del archivo debe contener la fecha actual (ej. backup_2024-05-20.tar.gz).

#!/bin/bash
FECHA=$(date +%Y-%m-%d)
ARCHIVO="backup_log_$FECHA.tar.gz"

tar -czf /tmp/$ARCHIVO /var/log 2>/dev/null
echo "Backup guardado en /tmp/$ARCHIVO"

9. Alerta de Espacio en Disco (UNED)

Enunciado: Script que comprueba si la partición principal (/) supera el 85% de uso. Si es así, muestra una advertencia en la terminal.

#!/bin/bash
PORCENTAJE=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')

if [ "$PORCENTAJE" -gt 85 ]; then
    echo "¡PELIGRO! El disco está al $PORCENTAJE% de capacidad."
else
    echo "Disco en estado óptimo ($PORCENTAJE%)."
fi

10. Creación Masiva de Usuarios (UMA)

Enunciado: Escribe un script que lea un archivo llamado usuarios.txt (un nombre por línea) y cree automáticamente una cuenta en el sistema para cada uno usando useradd.

#!/bin/bash
ARCHIVO="usuarios.txt"

if [ ! -f "$ARCHIVO" ]; then
    echo "No se encuentra el archivo $ARCHIVO"
    exit 1
fi

while IFS= read -r user; do
    sudo useradd -m "$user"
    echo "Usuario $user creado exitosamente."
done < "$ARCHIVO"

No hay comentarios:

Publicar un comentario