Guest User

Untitled

a guest
Feb 20th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.47 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. #Función que comprueba que el archivo accesos.log existe y es normal.
  4. comprobarExistenciaAccesos()
  5. {
  6. if [ -f accesos.log ]; then #-f indica cierto si existe y es normal.
  7.    echo "accesos.log existe"
  8. else
  9.    echo "accesos.log no existe. Saliendo del programa"
  10.    exit -1 #Si no existe salimos del programa.
  11. fi
  12. }
  13.  
  14. #Función que comprueba que el archivo prohibidos.log existe y es normal.
  15. comprobarExistenciaProhibidos()
  16. {
  17. if [ -f prohibidos.log ]; then #-f indica cierto si existe y es normal.
  18.    echo "prohibidos.log existe"
  19. else
  20.    echo "prohibidos.log no existe. Saliendo del programa"
  21.    exit -1 #Si no existe salimos del programa.
  22. fi
  23. }
  24.  
  25. #Función que comprueba que el archivo accesos.log tiene permisos de lectura.
  26. comprobarPermisosAccesos()
  27. {
  28. if [ -r accesos.log ]; then #-r indica cierto si tiene permisos de lectura.
  29.    echo "accesos.log tiene permisos de lectura"
  30. else
  31.    echo "accesos.log no tiene permisos de lectura. Saliendo del programa"
  32.    exit -1 #Si no tiene permisos de lectura salimos del programa.
  33. fi
  34. }
  35.  
  36. #Función que comprueba que el archivo prohibidos.log tiene permisos de lectura.
  37. comprobarPermisosProhibidos()
  38. {
  39. if [ -r prohibidos.log ]; then #-r indica cierto si tiene permisos de lectura.
  40.    echo "prohibidos.log tiene permisos de lectura"
  41. else
  42.    echo "prohibidos.log no tiene permisos de lectura. Saliendo del programa"
  43.    exit -1 #Si no tiene permisos de lectura salimos del programa.
  44. fi
  45. }
  46.  
  47. #Función que a partir de los argumentos (nombres de usuarios) dados imprime el número de veces que dichos usuarios visitaron las webs prohibidas.
  48. funcionPrincipalAccesos()
  49. {
  50.    if [ $# -gt 0 ]; then #Si el número de argumentos es mayor que 0(0 es el nombre del script).
  51.       for i in $*; do #Recorremos todos los argumentos pasados en la ejecución del script (usuarios) y, para cada uno de ellos hacemos:
  52.          for j in `more prohibidos.log`; do #Recorremos cada una de las páginas prohibidas.
  53.             visitas=0 #Creamos la variable que contará el número de veces que un determinado usuario visita cada página prohibida.
  54.             while read ii jj; do #Leemos cada línea de accesos.log y guardamos el nombre de usuario en ii y el nombre de la web en jj. A medida que leemos cada línea de prohibidos.log comprobamos que:
  55.                if [[ $i == $ii && $j == $jj ]]; then #Si el nombre de usuario es igual al nombre del usuario de la línea de accesos.log y el nombre de la web prohibida coincide con el segundo campo del fichero accesos.log entonces:
  56.                   visitas=`expr $visitas + 1` #Incrementamos en una unidad el número de visitas para esa web con ese usuario determinado.
  57.                fi #Finalizamos el if.
  58.             done < accesos.log #Vamos leyendo con el while del archivo accesos.log.
  59.             echo "El usuario $i ha visitado el sitio $j $visitas veces" #Imprimimos el número de veces que el usuario pasado por argumento visitó los sitios web prohibidos.
  60.          done #Finalizamos el for de la lectura de accesos prohibidos.                                                                
  61.       done #Finalizamos el for del recorrido de argumentos.
  62.    else #Si el número de argumentos no es mayor que 0(0 es el nombre del script).
  63.       visitasGlobales=0; #Declaramos la variable visitasGlobales que contará el número de visitas totales a las web prohibidas independientemente del usuario Como no tenemos parámetros, necesitamos saber los usuarios que hay en total. Para ello, cortamos la primera columna, ordenamos y con uniq hacemos que sólo salga un usuario de cada tipo sin duplicaciones.
  64.       for i in `cut -f1 accesos.log | sort | uniq`; do #Aplicamos el for sobre los usuarios existentes sin duplicación gracias a la sentencia anterior.
  65.          for j in `more prohibidos.log`; do #Recorremos cada una de las páginas prohibidas.
  66.             visitas=0; #Creamos la variable que contará el número de veces que un determinado usuario visita cada página prohibida.
  67.             while read ii jj; do #Leemos cada línea de accesos.log y guardamos el nombre de usuario en ii y el nombre de la web en jj. A medida que leemos cada línea de prohibidos.log comprobamos que:
  68.                if [[ $i == $ii && $j == $jj ]]; then #Si el nombre de usuario es igual al nombre del usuario de la línea de accesos.log y el nombre de la web prohibida coincide con el segundo campo del fichero accesos.log entonces:
  69.                   visitas=`expr $visitas + 1` #Incrementamos en una unidad el número de visitas para esa web con ese usuario determinado.
  70.                   visitasGlobales=`expr $visitasGlobales + 1` #Incrementamos en una unidad el número de visitas globales.
  71.                fi #Finalizamos el if.
  72.             done < accesos.log #Vamos leyendo con el while del archivo accesos.log.
  73.             echo "El usuario $i ha visitado el sitio $j $visitas veces" #Imprimimos el número de veces que el usuario pasado por argumento visitó los sitios web prohibidos.
  74.          done #Finalizamos el for de la lectura de accesos prohibidos.  
  75.       done #Finalizamos el for del recorrido de argumentos.
  76.       echo "El total de accesos prohibidos ha sido $visitasGlobales" #Imprimimos el número de accesos globales a las web prohibidas.
  77.    fi
  78. }
  79.  
  80. #Programa Principal
  81. #Primero, hacemos todas las comprobaciones en los archivos
  82. comprobarExistenciaAccesos
  83. comprobarExistenciaProhibidos
  84. comprobarPermisosAccesos
  85. comprobarPermisosProhibidos
  86. funcionPrincipalAccesos $* #A esta función le pasamos la lista de argumentos mediante $*
Add Comment
Please, Sign In to add comment