Examen ShellScript - ASO¶
Curso: Administración de Sistemas Operativos
Módulo: ShellScript
Duración: 2 horas
Puntuación total: 60 puntos
Instrucciones Generales¶
- Tiempo: 2 horas (120 minutos)
- Puntuación: 60 puntos total
- Formato: Resolver los ejercicios creando scripts en ShellScript
- Entrega: Crear un directorio
examen_[nombre]_[apellidos]con todos los scripts - Nomenclatura: Los scripts deben llamarse
ejercicio1.sh,ejercicio2.sh, etc. - Documentación: Cada script debe incluir comentarios explicativos
- Pruebas: Verificar que todos los scripts funcionan correctamente
Recursos Permitidos¶
Recursos Permitidos
Durante el examen SOLO se permite utilizar:
- Apuntes del tema ShellScript
- Aules (plataforma educativa)
- Terminal de bash de LliureX (para probar los scripts)
- "cheat sheet" propia.
NO se permite:
- Internet (excepto para acceder a Aules)
- Documentación externa
- Ayuda de compañeros
- Dispositivos móviles
- Cualquier otro recurso no autorizado
Instrucciones de Entrega¶
- Crear directorio:
examen_[nombre]_[apellidos] - Incluir:
- Archivo PDF con las respuestas de y explicaciones de los ejercicios 1-6 (según se solicita en cada ejercicio).
- Scripts completos de los ejercicios 5 y 6 (implementación).
- Comprimir en ZIP el directorio completo
- Subir al Moodle antes del tiempo límite
Ejercicio 1: Corrección de Código (10 puntos)¶
El siguiente script tiene varios errores. Identifica y corrige los errores:
#!/bin/bash
# Script para gestionar usuarios
nombre_usuario=$1
if [$# -eq 0]
echo "Debe proporcionar un nombre de usuario"
exit
fi
buscar_usuario() {
resultado=$(grep -i $nombre_usuario /etc/passwd)
if [$resultado]
echo "Usuario encontrado: $resultado"
return 0
else
echo "Usuario no encontrado"
return 1
fi
}
# Función principal
buscar_usuario
Tareas:
- Identifica los errores en el código
- Escribe el código corregido completo
- Explica brevemente cada corrección realizada
Criterios de evaluación:
- Identificación correcta de errores (4 puntos)
- Código corregido funcional (4 puntos)
- Explicaciones claras (2 puntos)
Ejercicio 2: Completar Código (12 puntos)¶
Completa el script para gestionar una lista de ciudades mediante Arrays. Faltan las partes marcadas con ____:
#!/bin/bash
# Declarar array de ciudades
____ ciudades=( ____ )
# Función para mostrar menú
mostrar_menu() {
____ "1) Añadir ciudad"
____ "2) Listar ciudades"
____ "3) Buscar ciudad"
____ "4) Salir"
}
# Función para añadir ciudad
añadir_ciudad() {
____ -p "Introduce el nombre de la ciudad: " nueva_ciudad
ciudades[____]="$nueva_ciudad"
____ "Ciudad añadida correctamente"
}
# Función para listar ciudades
listar_ciudades() {
____ "Listado de ciudades:"
____ i ____ {0..$____[____]}; do
____ "$____ ciudad ${ciudades[$i]}"
____
}
# Función para buscar ciudad
buscar_ciudad() {
____ -p "Introduce el término de búsqueda: " termino
____ ciudad ____ ciudades[@]; ____
____ [[ "$ciudad" == *"$termino"* ]]; then
____ "Ciudad encontrada: $ciudad"
____
____
}
# Menú principal
while ____; do
____
mostrar_menu
____ -p "Selecciona una opción: " opcion
____ $opcion ____
1) añadir_ciudad ;;
2) ____ ;;____
3) buscar_ciudad ;;
4) ____ ;;
____) ____ "Opción inválida" ;;
____
done
Criterios de evaluación:
- Sintaxis correcta (4 puntos)
- Lógica de arrays (3 puntos)
- Estructuras de control (3 puntos)
- Funcionalidad completa (2 puntos)
Ejercicio 3: Trazar Ejecución (8 puntos)¶
Analiza el siguiente script y completa la tabla de trazado:
#!/bin/bash
ciudades=("Madrid" "Barcelona" "Valencia")
for i in {0..2}; do
echo "Ciudad $i: ${ciudades[$i]}"
case ${ciudades[$i]} in
"Madrid")
echo "Capital de España"
;;
"Barcelona")
echo "Capital de Cataluña"
;;
*)
echo "Otra ciudad"
;;
esac
done
echo "Total de ciudades: ${#ciudades[@]}"
Salida esperada:
| Línea | Valor de i |
Valor de ${ciudades[$i]} |
Salida del case |
Total ciudades |
|---|---|---|---|---|
| 5 | 0 | ____ | ____ | __ |
| 11 | 1 | ____ | ____ | __ |
| 6 | 2 | ____ | ____ | __ |
| 13 | - | - | - | ____ |
Criterios de evaluación:
- Trazado correcto de variables (4 puntos)
- Comprensión del case (2 puntos)
- Salida correcta (2 puntos)
Ejercicio 4: Debug y Explicar (10 puntos)¶
Analiza este código del módulo de gestión de servidores:
function gestionar_servidores() {
while true; do
clear
# Mostrar opciones
echo "1) Listar servidores"
echo "2) Añadir servidor"
echo "3) Buscar servidor"
echo "4) Salir"
read -p "Selecciona opción: " opcion
case $opcion in
1) listar_servidores ;;
2) añadir_servidor ;;
3) buscar_servidor ;;
4) break ;;
*) echo "Opción inválida" ;;
esac
done
}
function listar_servidores() {
if [ -f "servidores.txt" ]; then
cat -n servidores.txt
echo "Total: $(wc -l < servidores.txt)"
else
echo "Archivo no encontrado"
fi
read -p "Presiona Enter para continuar..."
}
Preguntas:
- ¿Qué hace
cleary por qué se usa aquí? - Explica la diferencia entre
$opciony"$opcion"en el case - ¿Qué hace el operador
-fen la línea[ -f "servidores.txt" ]? - Explica qué hace
wc -l < servidores.txty por qué se usa<en lugar de| - ¿Para qué sirve
read -pal final de la función?
Criterios de evaluación:
- Respuestas técnicas correctas (6 puntos)
- Comprensión conceptual (4 puntos)
Ejercicio 5: Implementar Función (10 puntos)¶
Implementa la función buscar_servidor() que:
- Pida al usuario un término de búsqueda
- Busque en el archivo
servidores.txt(formato:nombre|ip|puerto|servicio) - Si encuentra resultados:
- Muestre todas las líneas que contengan el término
- Muestre cuántos resultados se encontraron
- Si no encuentra resultados: - Muestre un mensaje informativo
- Al final, pida presionar Enter para continuar
function buscar_servidor() {
____ "=========================================="
____ " BUSCAR SERVIDOR"
____ "=========================================="
____ ""
# Tu código aquí
# ______________
____ -p "Presiona Enter para continuar..."
}
Criterios de evaluación:
- Estructura de función correcta (2 puntos)
- Búsqueda con grep (2 puntos)
- Manejo de resultados (3 puntos)
- Validaciones adecuadas (3 puntos)
Ejercicio 6: Analizar Sistema de Backups (10 puntos)¶
Lee este código del módulo de backups:
crear_backup() {
fecha=$(date +%Y%m%d_%H%M%S)
nombre_backup="backup_servidores_$fecha.tar.gz"
tar -czf "backups/$nombre_backup" servidores.txt configuracion.conf logs/ 2>/dev/null
if [ -f "backups/$nombre_backup" ]; then
tamaño=$(du -h "backups/$nombre_backup" | cut -f1)
echo "Backup creado: $nombre_backup ($tamaño)"
echo "$(date): Backup creado" >> logs/sistema.log
else
echo "Error al crear backup"
fi
}
Preguntas teórico-prácticas:
- ¿Qué formato de fecha genera
date +%Y%m%d_%H%M%S? P.ej.: ____ - ¿Qué hace
-czfen el comandotar? - ¿Para qué sirve
2>/dev/null? - ¿Qué hace
cut -f1endu -h "backups/$nombre_backup" | cut -f1? - Explica la diferencia entre
>>y>:
>>: ____>: ____
Implementa la función restaurar_backup():
function restaurar_backup() {
____ "Backups disponibles:"
____ -la backups/
____ -p "Nombre del backup: " backup_restaurar
if [ ____ "backups/$backup_restaurar" ]; then
tar -____ backups/$backup_restaurar
____ "Backup restaurado"
else
____ "Backup no encontrado"
fi
}
Criterios de evaluación:
- Respuestas teóricas correctas (4 puntos)
- Función implementada correctamente (6 puntos)
Criterios de Evaluación General¶
Comprensión Técnica (40 puntos)¶
- Ejercicio 1 (Corrección): 10 puntos
- Ejercicio 2 (Completar): 12 puntos
- Ejercicio 3 (Trazar): 8 puntos
- Ejercicio 4 (Debug): 10 puntos
Aplicación Práctica (20 puntos)¶
- Ejercicio 5 (Implementar): 10 puntos
- Ejercicio 6 (Analizar): 10 puntos
Total: 60 puntos¶
¡Buena suerte!