# Practica 4 Linux Grupo 5 Comenzamos creando el script extensiones.sh. Para esto lo abrimos con el editor de texto que prefiramos (vi, vim, ...) y añadimos la cabecera utilizando comentarios: ``` #!/bin/bash # Programa: extensiones.sh # Propósito: Indicar el número de ficheros para cada extensión que hay en un directorio # Uso: Ruta absoluta # Autor: Grupo 5 - Azahara Ballester, Sandra Martín, Borja Ordóñez y Paula Riesgo # Fecha: 30/11/2020 ``` ## Función ejecutar La siguiente función se encarga de leer cada línea del fichero auxiliar con los ficheros que se encuentran en el directorio dado y separa los nombres de las extensiones. También cuenta el número de veces que se repiten las extensiones y almacena los datos en un array asociativo, cuyas claves son el nombre de las extensiones y los valores el número de repeticiones. ``` # Funcion que nos dice los ficheros y las extensiones que hay y cuantas son ejecutar () { declare -A extensionesA local ruta=$1 local fich=$2 local cont=1 echo echo "****** Ficheros del directorio $ruta ******" while read linea do nombre=$(echo $linea | cut -d "." -f 1) ext1=$(echo $linea | cut --complement -d "." -f 1) ext=$(echo $ext1 | cut --complement -d "." -f 1) echo "Fichero: $nombre , Extensión: $ext" if [[ ${#extensionesA[@]} -eq 0 ]] then extensionesA=([$ext]=1) else valor=${extensionesA[$ext]} extensionesA[$ext]=$(($valor+1)) fi done<$fich echo echo "****** Extensiones ******" for i in "${!extensionesA[@]}"; do echo "Extension $cont: $i => Número de ficheros: ${extensionesA[$i]}" cont=$(($cont + 1)) done } ``` ## Funcion comprobar La siguiente función se encarga de comprobar que la ruta dada sea un directorio, en caso de que no lo sea, cesará la ejecución del programa. ``` # Funcion que comprueba si la ruta es correcta comprobar () { local ruta=$1 if test -d $ruta; then echo "La ruta dada es un directorio." else echo "La ruta dada no es un directorio. Escriba la ruta absoluta correctamente." exit 1 fi } ``` ## Funcion fichero La siguiente función crea un fichero auxiliar en el cual introducimos todos los ficheros que se encuentran en el directorio dado, redireccionando la salida de la orden ls *.* al fichero. Esta orden muestra todos los ficheros con extensión que haya en la ruta. ``` # Función para crear un fichero con los datos de la ruta dada fichero() { local ruta=$1 local fichero=$2 cd $ruta ls *.*>$fichero } ``` ## Programa principal El programa comienza en este punto. Comprueba el número de parámetros que se pasan; que solo puede ser ningun parámetro (en cuyo caso es la ruta actual) o un parámetro. Si fuera mas de un parametro saltaria un error por exceso de parametros y nos informaría del mismo y finalizaría la ejecución. A continuacion, llama a las respectivas funciones para la realizacion del programa, que son: crear fichero, comprobar la ruta pasada como parametro y listar las extensiones. ``` ## Programa principal ## # Comprobamos el numero de parametros pasados case $# in 0) ruta=$(pwd) ;; 1) ruta="$1" ;; *) echo "Parámetros erróneos. El script necesita de una \"ruta (absoluta)\" o ninguna. En cuya caso, utiliza la direccion actual." exit 1 ;; esac # Fichero para los datos fich=~/Descargas/fichero.txt touch $fich # Llamadas a funciones comprobar "$ruta" fichero "$ruta" "$fich" ejecutar "$ruta" "$fich" ```