sábado, 4 de febrero de 2012

Examen Oposiciones 2008 Shell Script

#!/bin/bash
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#OPOSICIONES CUERPOS DOCENTES 2008
#EJERCICIO PRÁCTICO - PLANTEAMIENTO
#El ejercicio práctico se realizará bajo sistema operativo LINUX. Se podrá hacer uso del comando man.
#Elabora un script para llamado informe.sh que muestre información sobre el uso del sistema que realiza un determinado usuario.mEl shell-script tendra la siguiente sintaxis:
#informe.sh opcion [usuario]
#Las opciones pueden ser –u y –a. Si la opción que recibe es –u, deberá recibir como segundo argumento un nombre de usuario.
#Si el script ser ejecuta de la primera forma (-u usuario), deberá presentar un informe del usuario que se ha pasado por parámetro. En el informe deberán aparecer los siguientes datos:
#· Nombre del usuario.
#· Número de procesos que ha lanzado.
#· Nombre del primer proceso que lanzó.
#· Listado de todos los procesos que ha lanzado.
#· Número de directorios que tiene.
#· Número de ficheros regulares que tiene.
#· Uso del espacio en disco que ocupa.
#· Tanto por ciento de espacio en disco usado por el usuario.

function error {
    echo "¡¡Horror!! Uso "$0" -[u|a] [usuario]"
    exit
}

function numprocesos() {
    echo "Contando procesos, $1..."
    usuario=$1
    numproc=`ps -U $usuario | wc -l`
    echo "Número de procesos del usuario $usuario:$numproc"
}

function numprocesostotal() {
    echo "Contando procesos totales"
    usuario=$1
    numproc=`ps | wc -l`
    echo "Número de procesos total:$numproc"
}

function procesomasantiguo() {
    echo "Buscando proceso más antiguo, $1..."
    usuario=$1
    ps -F -U $usuario | head -2 | tail -1 | awk '{print $11}'
}

function procesomasantiguototal() {
    echo "Buscando proceso más antiguo total"
    ps -F | head -2 | tail -1 | awk '{print $11}'
}

function listadoprocesos() {
    echo "Listando procesos de usuario, $1..."
    usuario=$1
    ps -F -U $usuario
}

function listadoprocesostotal() {
    echo "Listando procesos total"
    ps -F
}

function numdirectorios() {
    echo "Contando número de directorios, $1..."
    usuario=$1
    carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
    #ls -ldr $carpetausuario/*   
    find $carpetausuario -type d -ls | wc -l
}

function numdirectoriostotal() {
    echo "Contando número de directorios total"
    carpetausuario="/home"
    #ls -ldr $carpetausuario/*   
    find $carpetausuario -type d -ls | wc -l
}

function fichregulares() {
    echo "Número de ficheros regulares, $1..."
    usuario=$1
    carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
    find $carpetausuario -type f -ls  | wc -l
}

function fichregularestotal() {
    echo "Número de ficheros regulares total"
    carpetausuario="/home"
    find $carpetausuario -type f -ls  | wc -l
}

function espacioendisco() {
    echo "Espacio en disco, $1..."
    usuario=$1
    carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
    du -sh $carpetausuario | awk {'print $1'}
}

function espacioendiscototal() {
    echo "Espacio en disco total"
    carpetausuario="/home"
    du -sh $carpetausuario | awk {'print $1'}
}

function tantoporcientoendisco() {
    echo "Tanto por ciento en disco, $1..."
    usuario=$1
    carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
    du -sh $carpetausuario | awk {'print $1'}
    ocupadocarpeta=`du -sh $carpetausuario | awk {'print $1'}`
    #le quita la letra del final
    ocupadocarpeta=`echo $ocupadocarpeta|sed 's/.$//'`
    tamanodisco=`df -h | head -2 | tail -1 | awk {'print $2'}`
    #le quita la letra del final
    tamanodisco=`echo $tamanodisco | sed 's/.$//'`
    echo "Ocupado carpeta:$ocupadocarpeta"
    echo "Tamaño disco:$tamanodisco"
    #expr no da decimales
    #porcentajecarpeta=`expr $ocupadocarpeta / $tamanodisco`
    #bc sí da decimales
    porcentajecarpeta=$( echo "scale=2;$ocupadocarpeta/$tamanodisco" | bc)
    porcentajecarpeta=$( echo "scale=2;$porcentajecarpeta*100" | bc)
    echo "El porcentaje de la carpeta $carpetausuario sobre el tamaño total del disco es $porcentajecarpeta%"
}


function tantoporcientoendiscototal() {
    echo "Tanto por ciento en disco total"
    carpetausuario="/home"
    du -sh $carpetausuario | awk {'print $1'}
    ocupadocarpeta=`du -sh $carpetausuario | awk {'print $1'}`
    #le quita la letra del final
    ocupadocarpeta=`echo $ocupadocarpeta|sed 's/.$//'`
    tamanodisco=`df -h | head -2 | tail -1 | awk {'print $2'}`
    #le quita la letra del final
    tamanodisco=`echo $tamanodisco | sed 's/.$//'`
    echo "Ocupado carpeta:$ocupadocarpeta"
    echo "Tamaño disco:$tamanodisco"
    #expr no da decimales
    #porcentajecarpeta=`expr $ocupadocarpeta / $tamanodisco`
    #bc sí da decimales
    porcentajecarpeta=$( echo "scale=2;$ocupadocarpeta/$tamanodisco" | bc)
    porcentajecarpeta=$( echo "scale=2;$porcentajecarpeta*100" | bc)
    echo "El porcentaje de la carpeta $carpetausuario sobre el tamaño total del disco es $porcentajecarpeta%"
}


#echo $#

if [[ $# -eq 0 ]]
then
    error
elif [[ $# -gt 0 ]]
then
    #Decir buenos días, nombre del usuario
    #nombreusuario=`id -un`
    #si el primer parámetro es -u
    if [[ $1 == "-u" ]]
    then
        echo "Entrando en -u"
        if [[ $2 == "" ]]
        then
            echo "No has introducido nombre de usuario. Saliendo del programa"
            error
        else #usuario correcto
            nombreusuario=$2
            echo $nombreusuario
            if id $nombreusuario > /dev/null 2>&1
            then
               echo "Usuario existe. Comenzando proceso"
               echo $nombreusuario
               numprocesos $nombreusuario   
               procesomasantiguo $nombreusuario
               listadoprocesos $nombreusuario      
               numdirectorios $nombreusuario
               fichregulares $nombreusuario
               espacioendisco $nombreusuario
               tantoporcientoendisco $nombreusuario
            else
              echo "El usuario no existe."
              error
            fi
        fi
    elif [[ $1 == "-a" ]]
    then
        echo "Entrando en -a"
        numprocesostotal   
        procesomasantiguototal
                listadoprocesostotal
        numdirectoriostotal
        fichregularestotal
        espacioendiscototal
        tantoporcientoendiscototal
    else
        error
    fi
else
    error
fi

No hay comentarios:

Publicar un comentario