---
# System prepended metadata

title: Practica 4 Linux Grupo 5

---

# 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"
```