Вы находитесь на странице: 1из 3

Universidad Tecnolgica Nacional

Facultad Regional Crdoba


Ing. en Sistemas de Informacin

Sistemas Operativos 2k6


Autor: Ing. Nicols Colacioppo

Ejercicio resuelto con funciones:

1)

Realice un script que permita que el usuario seleccione hasta que decida finalizar, las siguientes opciones:
a) Generar un informe que muestre la cantidad de memoria fsica y de intercambio del sistema, como as
tambin, la de memoria compartida y de buffer utilizados por el kernel. Este informe se deber mostrar
cada n segundos, siendo n un valor que ingresa el usuario. El informe se deber mostrar slo si este
valor de n ledo por teclado est comprendido entre 1 y 100. De lo contrario, mostrar un mensaje de
error.
b) Generar informes estadsticos sobre la memoria virtual. Estos informes se debern mostrar slo si se
cumplen las siguientes condiciones:
El usuario debera haber ingresado al menos 1 parmetro posicional, y ste sea un nmero mayor que 0,
el cual se corresponder con la frecuencia de la generacin de los informes.
Luego de solicitar al usuario que ingrese otro nmero correspondiente a la cantidad de informes
estadsticos a generar, si este nmero es mayor que 0.
c)

Borrar cada uno de los archivos regulares que haya en un directorio. La ruta a este directorio se deber
solicitar al usuario y leerla por teclado (utilizar for o find).

d) Mostrar la ruta al directorio de conexin de un usuario. El nombre de este usuario se deber recibir como
segundo parmetro posicional en el script. En caso de no recibirse este parmetro, se deber mostrar un
mensaje. En caso de no corresponderse con ningn usuario vlido, tambin se deber mostrar otro
mensaje (para verificar los datos del usuario utilizar el archivo /etc/passwd).
e) Salir.
Para programar con funciones.

Sintaxis general para declarar una funcin:


function nombre_de_la_funcion()
{
comandos o instrucciones bash
}
La funcin debe estar declarada antes de ser invocada.

Dami, utilic el mismo ejercicio que les prepar a los alumnos del 2k6, y lo resolv con funciones. Fijate que la
declaracin de las mismas, deben ir antes de su invocacin. Slo utilizo una instruccin como parte del scritp,
que invoca a la funcin principal.

#!/bin/bash
function menu()
{
echo "Men de opciones:"
echo "a) Generar informes de memoria fsica y de intercambio, compartida y de buffers"
echo "b) Generar informes estadsticos de memoria virtual"
echo "c) Borrar archivos regulares de un directorio"
echo "d) Mostrar la ruta del directorio de conexin de cierto usuario"
echo "e) Salir"
}#fin function menu
function punto1()
Hoja: Pgina 1 de 3

Universidad Tecnolgica Nacional


Facultad Regional Crdoba
Ing. en Sistemas de Informacin

Sistemas Operativos 2k6


Autor: Ing. Nicols Colacioppo

echo "Ingrese la frecuencia en segundos: "


read n
while [ $n -lt 1 ] || [ $n -gt 100 ]
do
echo "Debe ingresar un valor entre 1 y 100: "
read n
done
free -s$n
}#fin function punto1
function punto2()
{
if [ $# -ge 1 ]
then
if [ $1 -ge 1 ]
then
echo "Ingrese la cantidad de informes estadsticos a generar: "
read n
while [ $n -le 0 ]
do
echo "Debe ingresar un valor mayor que 0: "
read n
done
vmstat $1 $n
else
echo "El primer parmetro no es un nmero mayor o igual que 1"
fi
else
echo "No ingres al menos un parmetro posicional"
fi
}#fin function punto2
function punto3()
{
echo "Ingrese la ruta al directorio: "
read dir
while test -d $dir
do
echo "Debe ingresar la ruta a un directorio existente: "
read dir
done
#Luego de asegurarme de tener una ruta a un directorio
#accedo al contenido, y verifico cada elemento si es
#un archivo regular; si lo es, lo borro.
for i in `ls -1 $dir`
do
if test -f $dir/$i
then
rm -i $dir/$i then
fi
done
#La otra alternativa es usando el comando find
#find $dir -type f -exec rm -i {} \;
}#fin function punto3

function punto4()
Hoja: Pgina 2 de 3

Universidad Tecnolgica Nacional


Facultad Regional Crdoba
Ing. en Sistemas de Informacin

Sistemas Operativos 2k6


Autor: Ing. Nicols Colacioppo

if [ $# -ge 2 ]
then
ruta=`cat /etc/passwd | grep "^$2" | cut -d":" f6`
if test -z $ruta
then
echo $2" No es un usuario registrado"
else
echo "El directorio de conexin de " $2 " es: "$ruta
fi
else
echo "No ingres dos o ms parmetros posicionales"
fi
}#fin function punto4
function op_incorrecta()
{
echo "Opcin incorrecta. Vuelva a intentarlo."
}#fin function op_incorrecta
function salir()
{
echo "Finalizacin del programa. Gracias."
exit
}#fin function salir
function principal()
{
while true
do
menu
echo "Ingrese su opcin: "
read op
case $op in
a|A) punto1;;
b|B) punto2;;
c|C) punto3;;
d|D) punto4;;
*)op_incorrecta;;
e|E) salir
esac
done
}#fin function principal
#Llamo a la function principal, y ejecuto el script con una lnea de cdigo
principal

Hoja: Pgina 3 de 3