Ejercicios Prácticos de Bash Scripting
Ejercicio 1
Section titled “Ejercicio 1”Crear un programa al que se le pasen 2 ficheros de texto y diga cuál es el que tiene más líneas.
- Debe asegurarse que se le pasan 2 argumentos, que son ficheros de texto y que existen.
- PISTA: comando
wc
#### Lo ejecutaremos de la siguiente manera:
./cuenta_lineas.sh fichero1 fichero21b. Modifica el programa para que, si no le pasamos ningún parámetro nos pida el nombre de los 2 ficheros.
Ejercicio 2
Section titled “Ejercicio 2”Realiza un script que lea un valor entero que representa una nota hasta que se escriba la palabra SALIR.
- compruebe si está en el rango adecuado (0 a 10)
- Si lo está, debe imprimirlo en modo texto (suspendido, suficiente, notable, sobresaliente…)
- Si no lo está, debe mostrar un mensaje de error.
- Si no se introduce ningún número, el script debe asumir un valor por defecto de 0.
Ejercicio 3
Section titled “Ejercicio 3”Crea un script que pregunte por un nombre de usuario y que devuelva por pantalla si existe o no en el sistema.
Ejercicio 4
Section titled “Ejercicio 4”Crear una tarea periódica para que cada 1 minutos, cree un archivo en /tmp/informe El nombre del archivo será, anyo-mes-dia_hora:minutos:segundos.txt En el archivo habrá información del sistema en ese momento:
- total procesos en ejecución, memoria disponible, almacenamiento, total de usuarios logueados, etc… También contendrá información sobre si hay determinados procesos en marcha en ese momento:
- sshd
- systemd
- top
Ejercicio 5
Section titled “Ejercicio 5”Lee una secuencia de líneas de su entrada enviadas desde una tubería mediante cat fichero
- Divide las líneas en palabras
- Elimina los posibles signos de puntuación (comas, puntos, exclamaciones)
- Muestra cada una de las palabras
Ejercicio 6
Section titled “Ejercicio 6”Realiza una copia de seguridad de los archivos de $HOME
- La copia debe hacerse en /tmp/$HOME/
- Si es la primera vez que se hace el backup, deben copiarse todos los directorios y archivos
- Pero si ya hay una copia previa, sólo deben copiarse los directorios y archivos que sean nuevos (o modificados) desde la última copia. Para ello, utiliza un fichero oculto en /tmp/$HOME, que actúe de marca temporal.
Sugerencia: Se sugiere crear primero los directorios (mkdir) y luego copiar los archivos (cp). En ambos casos, estudia la utilización de la opción -p
Ejercicio 7
Section titled “Ejercicio 7”Implementa un script que imprima un listado de los usuarios que tienen procesos en ejecución, indicando para cada uno:
- La cantidad de procesos que está ejecutando
- La suma de sus consumos actuales de CPU (en %)
- La suma de sus consumos actuales de memoria (en %)
Sugerencia: Se sugiere utilizar la orden ps para averiguar la información de base.
Ejercicio 8
Section titled “Ejercicio 8”Implementa un script que se ejecute cada 5 minutos y compruebe que siguen ejecutándose los procesos necesarios para hadoop y yarn. Si al ejecutarse no encuentra alguno de los procesos necesarios ha de dejar un registro (log) Si al ejecutarse encuentra todos los procesos necesarios también ha de indicarlo en el log. Pistas:
- Ejecutar un script cada X minutos o segundos… utilizaremos “cron”
- https://nksistemas.com/crear-un-script-simple-y-ejecutarlo-con-cron-crontab-en-tu-linux/
- Para ayudarnos a generar el cron correctamente: https://crontab.guru/
- Procesos activos en el sistema
ps -aux, o para hadoopjps bash -c "exec -a <MyProcessName> <Command>"
Ejemplo de log creado:
lun 11 dic 2023 18:10:00 CET Ejecución correcta [OK] lun 11 dic 2023 18:15:00 CET Error NodeManager [ERROR] lun 11 dic 2023 18:15:00 CET Error SecondaryNameNode [ERROR] lun 11 dic 2023 18:15:00 CET Error ResourceManager [ERROR] lun 11 dic 2023 18:20:00 CET Ejecución correcta [OK]Ejercicio 9
Section titled “Ejercicio 9”Mandar los logs del script anterior por telegram.
- Crear bot con BotFather Obtener token HTTP API 6482272093:AAEWWA3hZ0O6t4tC4TCpP5ewPVSjpQNL0jj
- Entrar en el bot Start bot
- Obtener chatID a través de una URL https://api.telegram.org/bot**${token}**/getUpdates
- Obtener chatID https://ungineer.github.io/chatid.html 251175583
- Mandar mensaje a través de bash:
API_TOKEN="<your_api_token>"CHAT_ID="<your_chat_id>"
# Set the message textMESSAGE="This is a test message"
# Use the curl command to send the messagecurl -s -X POST https://api.telegram.org/bot$API_TOKEN/sendMessage -d chat_id=$CHAT_ID -d text="$MESSAGE"Ejercicio 10
Section titled “Ejercicio 10”Un sistema informático almacena en varios ficheros “log” los usuarios y la fecha de conexión (usuario:mes:dia).
Hay que hacer un script al que se le puedan pasan 2 parámetros, el primero un nombre de usuario y el segundo un fichero log y comprobará (mostrando por pantalla) cuántos accesos ha realizado el usuario el mes actual.
Control de errores:
- 2 parámetros requeridos
- El fichero de logs no existe
Ejemplo datos.log
pedro:ENE:21ana:JUN:13juan:ABR:16roberto:JUN:01juan:MAR:13pedro:FEB:01lucas:ENE:07pedro:JUN:15roberto:JUN:02ana:JUN:13lucas:ENE:07juan:JUN:16pedro:MAY:01juan:MAR:13Ejemplos de ejecución
## Teniendo en cuenta que el mes actual es ENERO./conexiones.sh ana datos.log
El usuario ana se ha conectado este mes 0 veces../conexiones.sh pedro datos.log
El usuario pedro se ha conectado este mes 1 vez.