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