IES Miguel Romero Esteo - Departamento de Informática - Linux/Unix

Bash y programación en Bash / Práctica 8

Enunciado:

1. Funciones

a. Ejercicio 1: funciones simples

Comandos útiles: df, who.

Escriba un script audit.sh:

  • Escriba una función users_connect que mostrará la lista de los usuarios conectados actualmente.

  • Escriba una función disk_space que mostrará el espacio en disco disponible.

  • El programa principal mostrará el siguiente menú:

- 0 - Fin  
- 1 - Mostrar la lista de usuarios conectados 
- 2 - Mostrar el espacio en disco 
Su opción:
  • Introducir la opción del usuario y llamar a la función adecuada.

b. Ejercicio 2: funciones simples, valor de retorno

Comandos filtro útiles: awk, tr -d. Otros comandos útiles: df, find.

Escriba un script explore_sa.sh:

  • Programa principal:

  • El programa principal mostrará el menú siguiente:

0 - Fin  
1 - Eliminar los archivos de tamaño 0 de mi directorio principal 
2 - Controlar el espacio de disco del SA raíz  
Su opción:
  • Introduzca la opción del usuario.

  • La opción 0 provocará la finalización del script.

  • La opción 1 llamará a la función limpieza.

  • La opción 2 causará la llamada a la función sin_espacio_d.

  • En función del valor retornado por la función, mostrar el mensaje adecuado. 

  • Escriba la función limpieza: busque, a partir del directorio de inicio del usuario, todos los archivos que tengan tamaño 0 con objeto de eliminarlos (despuésde solicitar confirmación para cada archivo).

  • Escriba la función sin_espacio_d: esta función verifica la utilización del sistema de archivos raíz y retorna verdadero si la tasa es superior al 80% y falso en caso contrario.

Ejemplos de ejecución

$ explore_sa.sh 
  
0 - Fin  
1 - Eliminar los archivos de tamaño 0 de mi directorio principal 
2 - Controlar el espacio de disco del SA raíz 
Su opción: 1 
 
rm: eliminar fichero regular vacio  
`/home/cristina/.gconf/%gconf.xml’? n 
etc.  
  
$ explore_sa.sh 
  
0 - Fin  
1 - Eliminar los archivos de tamaño 0 de mi directorio principal 
2 - Controlar el espacio de disco del SA raíz 
Su opción: 2 
Tasa de utilización del sistema de archivos raíz: NORMAL

c. Ejercicio 3: paso de parámetros, retorno de valor

Escriba un script calcul.sh, que contendrá:

  • Una función esNum que recibe un valor como argumento y que retorna verdadero si el valor es un número entero y falso en el caso contrario.Si define variables, estas deberán ser locales.

  • Una función suma que recibirá un número cualquiera de parámetros. La función debe verificar, empleando la función esNum, que los argumentos recibidos son números y mostrar la suma de los argumentos. Si uno de los argumentos es incorrecto, este será ignorado. Si emplea variables, estas deberán ser locales.

  • Una función producto que recibe un número cualquiera de parámetros. La función debe verificar, empleando la función esNum, que los argumentos recibidos son números y mostrar el producto de los argumentos. Si uno de los argumentos es incorrecto, este será ignorado. Si emplea variables, estas deberán ser locales.

  • El programa principal:

  • El script calcul.sh recibirá como argumentos la operación que se ha de realizar, al igual que una serie de números.

$ calcul.sh producto 3 5 10   
150  
$ calcul.sh suma 3 5 10   
25
  • Llamar a la función correspondiente a la operación solicitada y pasar los valores recibidos por el script. Mostrar por pantalla el resultado devuelto por la función.

d. Ejercicio 4: archivos

Comando útil: printf.

Sea el siguiente archivo de datos:

$ cat alumnos.txt   
Nombre|Clase|Promedio 
Luis|6to|3 
Carlos|6to|14 
Clarisa|6to|16 
Jorge|6to|18 
Pedro|6to|8 
Damian|5to|10 
Daniel|5to|11 
Pablo|5to|7 
Victor|5to|14

Escriba un script stats.sh que muestre por pantalla, con formato, las tres columnas del archivo según sigue:

$ stats.sh   
Nombre         Clase       Promedio 
Luis           6to                3 
Carlos         6to               14 
Clarisa        6to               16 
Jorge          6to               18 
Pedro          6to                8 
Damian         5to               10 
Daniel         5to               11 
Pablo          5to                7 
Victor         5to               14

e. Ejercicio 5: archivos, funciones, menú select

Comando útil: printf.

Sea el siguiente archivo de datos:

$ cat alumnos.txt 
Nombre|Clase|Promedio 
Luis|6to|3 
Carlos|6to|14 
Clarisa|6to|16 
Jorge|6to|18 
Pedro|6to|8 
Damian|5to|10 
Daniel|5to|11 
Pablo|5to|7 
Victor|5to|14

Escriba el script stats_select.sh que:

  • Permita mostrar los registros de cada Clase.

  • Permita el cálculo del promedio de cada Clase.

El script mostrará un menú escrito con la estructura select.

Ejemplo de ejecución

$ stats_select.sh   
1) Extracto por clase 
2) Promedio por clase 
3) Fin  
  
Su opción: 1  
Clase ? 6to                             
Luis           6to                3 
Carlos         6to               14 
Clarisa        6to               16 
Jorge          6to               18 
Pedro          6to                8 

.................

Su opción: 2  Clase ? 5to  Nota : 10   Nota : 11   Nota : 7   Nota : 14   Promedio de la clase de 5to: 10

.................

f. Ejercicio 6: archivos, tablas asociativas (bash 4, ksh93)

Sea el archivo datos.txt:

$ cat datos.txt   
Juan Juan|46290|Valencia 
Olivia Perez|24200|León 
Carlos Izaguirre|24200|León 
Alejandro Arevalo|24100|León 
Jorge Olvido|26350|La Rioja 
Jose Martinez|26350|La Rioja

Escriba un script tabAsoc.sh que cuente el número de habitantes por ciudad.

Ejemplo de resultado

$ tabAsoc.sh  
Valencia => 1 
La Rioja => 2 
León => 3