Escribe el código de los shell scripts que se detallan en cada ejercicio.
Deberás crear un fichero de texto para cada
ejercicio con el siguiente nombre: ejX.sh, donde la X representa el número de ejercicio. Una vez terminada la
práctica, comprime todos estos ficheros en uno y súbelos al Moodle del módulo.
NOTA IMPORTANTE
En la construcción de los siguientes programas o shell scripts se valorará la presentación interna y externa:
✔ En la presentación interna, importan los comentarios, la claridad de los comandos, la significación de los
nombres elegidos; todo esto debe permitir considerar al programa como 'autodocumentado'.
✔ En la presentación externa, importan las leyendas aclaratorias, ayudas, y avisos de ejecución que
favorezcan la comprensión del programa al usuario final.
✔ Se aconseja colocar los archivos de los programas en un subdirectorio de la carpeta de usuario actual,
donde no deberá haber otra cosa que estos programas.
✔ Si el shell script usa parámetros, será obligatorio que compruebe los datos antes de continuar con la
ejecución del mismo. Si existe algún error se deberá proceder según indica el enunciado del ejercicio. En
caso de no especificarse, la falta o incorrección de un parámetro anulará la ejecución del shell script.
✔ Así mismo, tras recoger variables de usuario, se debe comprobar su validez antes de proseguir con el
programa.
ACTIVIDADES DE INTRODUCCIÓN
1. Crea un shell script que muestre por pantalla el mensaje “¡Hola Mundo!”.
2. Crea un shell script que haga una copia de los archivos de la carpeta Documentos del usuario actual. La
copia la realizará en una carpeta con el siguiente nombre: “Documentos-DD-MM-AA”, donde DD es el día,
MM el mes y AA el año en el que se realiza la copia.
Ahora modifica el shell script (guárdalo como ej2B.sh) para que pregunte al usuario el nombre de la
carpeta que desea copiar. El formato de salida será: “nombre-carpeta-DD-MM-AA”.
3. Realiza un shell script que admita un único parámetro correspondiente al nombre de un fichero de texto.
Mostrará por pantalla el número de líneas del mismo utilizando el comando wc.
ACTIVIDADES DE DESARROLLO
4. Crea un shell script que muestre por pantalla el resultado de de las siguientes operaciones. Debes tener en
cuenta que a, b y c son variables enteras que son preguntadas al usuario al iniciar el script.
a) a%b
b) a/c
c) 2 * b + 3 * (a-c)
d) a * (b/c)
e) (a*c)%b
5. Modifica el shell script realizado en el ejercicio 4 para comprobar si el fichero existe. En tal caso debe contar
el número de líneas del mismo a través del comando wc y mostrar un mensaje indicando dicho número. Si el
fichero no existe, debe mostrar un mensaje de error y salir.
6. Crea un shell script que al ejecutarlo muestre por pantalla uno de estos mensajes “Buenos días”, “Buenas
tardes” o “Buenas noches”, en función de la hora que sea en el sistema (de 8:00 de la mañana a 15:00 será
mañana, de 15:00 a 20:00 será tarde y el resto será noche). Para obtener la hora del sistema utiliza el
comando date.
7. Construye los siguientes tres shell script utilizando estructuras iterativas:
a) el primero ej7A.sh, que pida un número e indique si se trata de un número par y si es número primo.
b) el segundo ej7B.sh, que pida un número al usuario e imprima su tabla de multiplicar desde el 1 al 10. La
salida debe estar debidamente formateada.
c) el tercero ej7C.sh, que muestre las 10 primeras tablas de multiplicar por pantalla. Existirá un tiempo de
espera de dos segundos entre tabla (usa el comando sleep para ello).
280
8. Crea un shell script para jugar a “Doble o Nada”. Consistirá en adivinar un número entre 1 y 10 (este número
será generado al azar por el ordenador, para ello debes utilizar la función $RANDOM de la siguiente manera
numero=$RANDOM % 10). Añade al juego las siguientes características:
a) El jugador apuesta una cantidad de un valor inicial de 100 puntos.
b) Si sale cara obtiene el doble de la cantidad apostada. Si sale cruz pierde todo lo apostado.
c) El shell script debe llevar la cuenta de las tiradas y de la cantidad ganada.
d) Al final de la partida mostrará un informe por pantalla a modo de resumen.
9. Modificar el shell script anterior para que permita ir jugando hasta que el jugador decida abandonar el juego
(para ello deberá pulsar la tecla “x” del teclado), o no tenga más dinero que apostar. Tampoco podrá
apostar más dinero del que dispone en su “cartera virtual”.
10. Crea un shell script que rellene un vector con diez números pedidos al usuario y que los muestre por pantalla
de la siguiente forma:
a) en orden inverso a como han sido introducidos los valores
b) los valores ordenados de menor a mayor en una sola línea
c) los valores ordenados de mayor a menor en una sola línea
d) la suma total de sus valores
e) cantidad de valores pares que contiene el vector
f) la suma total de números impares
g) la media aritmética de los valores que contiene el vector
11. Construye un programa denominado AGENDA que permita mediante un menú, el mantenimiento de un
pequeño archivo lista.txt con el nombre, dirección y teléfono de varias personas. Debes incluir estas
opciones al programa:
✔ añadir (añadir un registro)
✔ buscar (buscar entradas por nombre, dirección o teléfono)
✔ listar (visualizar todo el archivo).
✔ ordenar (ordenar los registros alfabéticamente).
✔ borrar (borrar el archivo).
12. Crea un shell script para que haga una copias de seguridad avanzadas de todos los archivos de texto, video
y música del directorio de trabajo del usuario actual. Debes usar funciones para cada tarea del shell script y
vectores para el manejo de los ficheros. Deberá realizar las siguientes acciones:
✔ estos ficheros serán guardados en una carpeta en el directorio home del usuario actual
estructurados por extensiones; los odt en la carpeta odt, los txt en la carpeta txt etcétera. Esta
carpeta, obviamente, deberá ser excluida de la búsqueda de archivos.
✔ comprobará si el archivo ya existe en la copia de seguridad, si es así comprobará cual de los dos es
más reciente y que tamaño tienen. Si es más reciente o posee un tamaño mayor, lo copiará. En
cualquier otro caso, no lo copia.
✔ llevará un registro de todos los archivos copiados cada vez que se ejecute mediante un archivo de
bitácora. Éste archivo se generará con el nombre “copia-fecha-hora generación.txt en la
copia-fecha-hora de generación.txt”
carpeta /home/tu_usuario/copias/logs.
13. Realiza un shell script que permita crear un informe de las IP de la red en la que se encuentra el equipo. Usa
funciones para cada una de las acciones que se requieren. Debe contener las siguientes opciones:
✔ el nombre del informe y su ubicación serán pasados como parámetros. Si no los encuentra,
preguntará al usuario por ellos en lugar de cerrar la aplicación.
✔ el informe contendrá un listado de todas las IP de la red a la que pertenece el equipo indicando si
está libe o no (usa el comando ping).
✔ en el informe debe aparecer el tipo de red (A, B o C) en el que está inmerso el ordenador con el
nombre de la red, su broadcast y su máscara de subred.
281
ACTIVIDADES DE AMPLIACIÓN
14. Crea un shell script que genere una copia de seguridad de la carpeta Escritorio del usuario actual. Esta
copia será almacenada en la carpeta /home/$USER/Seguridad-fecha de creación . En lugar de las
palabras “fecha de creación” será necesario incluir la fecha (hora, minuto, día y mes) en la que fue
realizada la copia. Cada copia debe estar contenida en su propia carpeta independiente del resto.
Programa esta tarea con cron para que se ejecuta cada hora. Comprueba los resultados.
15. Cambia el shell script del juego “Doble o Nada” para que podamos guardar las puntuaciones del jugador en
un archivo de texto. Al final de cada partida se mostrará los cinco mejores jugadores ordenados por la
cantidad ganada (deberás guardar la puntuación de todos los jugadores en un archivo de texto llamado
puntuaciones.txt para ello utiliza el comando echo así como los redireccionadores).
puntuaciones.txt,
16. Crea un shell script que funcione de manera similar a la papelera de reciclaje. El manejo de los ficheros se
debe realizar a través de vectores. El programa debe mostrar el siguiente menú e implementar sus
operaciones que serán implementadas a través de funciones:
a) eliminar archivo. Esta operación recibe la ruta completa de un archivo y lo mueve al directorio
/home/tu_usuario/recycled. Si no existe dicho directorio, el programa ha de crearlo.
b) restaurar archivo. Esta operación recibe el nombre de un archivo y lo mueve, desde la papelera de
reciclaje, al directorio en el que estuviera anteriormente. El proceso de eliminación, debe haber
almacenado, por tanto dicho directorio en un fichero de texto.
c) restaurar toda la papelera. Esta operación es similar a la anterior, pero se efectúa sobre todos los
ficheros de la papelera.
d) vaciar la papelera. Esta opción vacía el contenido de la papelera. Ninguno de los archivos será
recuperable.
e) mostrar la papelera. Esta opción muestra el contenido de la papelera.
f) salir. Sale del programa.
ACTIVIDADES DE REFUERZO
17. Escribe tres shell script utilizando estructuras alternativas:
a) el primero ej17A.sh, que pida al usuario tres números y los muestre ordenados de mayor a menor. Se
deberá comprobar que los datos facilitados por el usuario son válidos.
b) el segundo ej17B.sh, que a partir de una fecha introducida por teclado con el formato DÍA, MES, AÑO,
se obtenga la fecha del día siguiente.
c) el tercero ej17C.sh, que acepte una calificación numérica y visualice la correspondiente en letra:
Grado numérico Grado en letra
Mayor o igual a 90 A
Menor que 90 pero mayor que o igual a 80 B
Menor de 80 pero mayor o igual a 70 C
Menor de 70 pero mayor o igual a 69 D
Menor de 69 F
18. Crea un shell script que sume los números del 1 al 1000 mediante una estructura repetir, mientras y desde.
19. Escribe un shell script que genere dos vectores de quince elementos cada uno y los rellene con número
aleatorios comprendidos entre 0 y 100. Después sume esas dos estructuras y muestre los tres vectores por
pantalla. Para ello crea las funciones imprimir_array(array_a_imprimir) y sumar_array(array1, array2).
20. Diseña un shell script que use funciones para permitir introducir el valor en la posición indicada por el usuario
en un vector de treinta elementos ya creado. Crea un para ello deberá comprobar:
a) si el número introducido es mayor que el número de elementos, lo insertará al el último
b) si el número coincide con una posición, el elemento que se encuentra en esa posición pasará a la
posición n+1
c) si el número es menor que cero, alertará al usuario que no es posible realizar esa acción
282