Skip to content

Ejercicios Prácticos de Bash Scripting

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
Terminal window
#### Lo ejecutaremos de la siguiente manera:
./cuenta_lineas.sh fichero1 fichero2

1b. Modifica el programa para que, si no le pasamos ningún parámetro nos pida el nombre de los 2 ficheros.


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.

Crea un script que pregunte por un nombre de usuario y que devuelva por pantalla si existe o no en el sistema.


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

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

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


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.


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:

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]

Mandar los logs del script anterior por telegram.

  1. Crear bot con BotFather Obtener token HTTP API 6482272093:AAEWWA3hZ0O6t4tC4TCpP5ewPVSjpQNL0jj
  2. Entrar en el bot Start bot
  3. Obtener chatID a través de una URL https://api.telegram.org/bot**${token}**/getUpdates
  4. Obtener chatID https://ungineer.github.io/chatid.html 251175583
  5. Mandar mensaje a través de bash:
Terminal window
API_TOKEN="<your_api_token>"
CHAT_ID="<your_chat_id>"
# Set the message text
MESSAGE="This is a test message"
# Use the curl command to send the message
curl -s -X POST https://api.telegram.org/bot$API_TOKEN/sendMessage -d chat_id=$CHAT_ID -d text="$MESSAGE"

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

Terminal window
pedro:ENE:21
ana:JUN:13
juan:ABR:16
roberto:JUN:01
juan:MAR:13
pedro:FEB:01
lucas:ENE:07
pedro:JUN:15
roberto:JUN:02
ana:JUN:13
lucas:ENE:07
juan:JUN:16
pedro:MAY:01
juan:MAR:13

Ejemplos de ejecución

Terminal window
## 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.