viernes, 8 de julio de 2011

Proyecto biblioteca (en Linux bash)


Para aprovechar algún tiempo que me sobró durante la realización del proyecto de la biblioteca, decidí realizar el mismo proyecto sobre la consola de un sistema Linux utilizando bash. Esto me ha permitido recordar un poco la sintaxis de este lenguaje de scripting, del que ya tenía algo de conocimientos. Además, hay que decir que la potencia de los lenguajes de script en la consola de Linux son mucho más potentes que la de MS-DOS.
Para ahorrar tiempo he tratado de traducir directamente los scripts de un lenguaje a otro. En algunos casos la semejanza entre los dos códigos es evidente pero en otros es completamente inexistente. Sin embargo, la lógica es la misma en los dos casos y por tanto los diagramas serían aplicables en los dos casos.


COMPROBAR EXISTENCIA DE DIRECTORIOS
#!/bin/bash
if [ ! -d "LIBROS" ]
then
mkdir LIBROS
fi
if [ ! -d "PRESTAMOS" ]
then
mkdir PRESTAMOS
fi
if [ ! -d "LISTADOS" ]
then
mkdir LISTADOS
fi

MENÚ
#!/bin/bash
./ComprobarDirs.sh

while [ false ]; do

clear
echo "1) Añadir libro"
echo "2) Prestar libro"
echo "3) Listar todos (ordenados por signatura)"
echo "4) Listar todos (ordenados alfabéticamente)"
echo "5) Listar prestados"
echo "6) Listar amigos con préstamos"
echo "7) Devolver libros"
echo "8) Buscar libro"
echo "9) Salir"

echo -e "Elija una opción: \c"
read opcion
echo "La opción elegida es: $opcion"

if [ $opcion -eq 1 ]; then
./AnadirLibro.sh
fi
if [ $opcion -eq 2 ]; then
./PrestarLibro.sh
fi
if [ $opcion -eq 3 ]; then
./ListarLibSig.sh
fi
if [ $opcion -eq 4 ]; then
./ListarLibAlf.sh
fi
if [ $opcion -eq 5 ]; then
./ListarLibPrest.sh
fi
if [ $opcion -eq 6 ]; then
./ListarAmigosPrest.sh
fi
if [ $opcion -eq 7 ]; then
./DevolverLibros.sh
fi
if [ $opcion -eq 8 ]; then
./BuscarLibro.sh
fi
if [ $opcion -eq 9 ]; then
exit
fi

done

AÑADIR LIBROS
#!/bin/bash

echo -e "\nIntroduzca la signatura del libro: "
read signatura
echo -e "\nIntroduzca el título: "
read titulo
echo -e "\nIntroduzca el nombre del autor: "
read autor

fichero="$signatura.lib"
echo -e "$titulo - $autor" > "LIBROS/$fichero"
echo -e "El libro ha sido incluido en la biblioteca"

read -p "Pulse para continuar..."


PRESTAR LIBROS
#!/bin/bash
echo -e "Introduzca el título del libro: "
read titulo
echo -e "Introduzca el nombre del autor: "
read nombreAutor
echo -e "Introduzca el nombre de su amigo: "
read nombreAmigo

fecha=`date +"%m/%d/%Y"`
echo -e "$titulo - $nombreAutor $fecha" > "PRESTAMOS/$nombreAmigo.pre"
echo -e "\nEl préstamo ha sido guardado"

read -p "Pulse para continuar..."

LISTAR LIBROS POR SIGNATURA
#!/bin/bash
if [ -f LISTADOS/ListadoLibrosSig.txt ]; then
rm LISTADOS/ListadoLibrosSig.txt
fi
for f in $( ls LIBROS/*.lib | sort ); do
# nombreLargo=${f%.*}
# nombre=${nombreLargo##*/}
lineaFichero=`cat $f`
titulo=${lineaFichero%-*}
#echo -e "$titulo"
echo -e "$titulo" >> LISTADOS/ListadoLibrosSig.txt
done

echo -e "\n******************************************"
echo -e "+++ LISTADO LIBROS POR SIGNATURA +++"
echo -e "******************************************"
cat LISTADOS/ListadoLibrosSig.txt

read -p "Pulse para continuar..."

LISTAR LIBROS ALFABÉTICAMENTE
#!/bin/bash
if [ -f LISTADOS/ListadoLibAlf.txt ]; then
rm LISTADOS/ListadoLibAlf.txt
fi

echo -e "************************************************"
echo -e "+++ LISTADO LIBROS ORDENADOS ALFABÉTICAMENTE +++"
echo -e "************************************************"
for f in $( ls LIBROS/*.lib ); do
lineaFichero=`cat $f`
titulo=${lineaFichero%-*}
echo -e "$titulo" >> LISTADOS/ListadoLibAlf.txt
done
cat LISTADOS/ListadoLibAlf.txt | sort > kk.tmp
mv kk.tmp LISTADOS/ListadoLibAlf.txt
cat LISTADOS/ListadoLibAlf.txt

read -p "Pulse para continuar..."

LISTAR AMIGOS CON PRÉSTAMOS
#!/bin/bash
if [ -f LISTADOS/ListadoAmigosPrest.txt ]; then
rm LISTADOS/ListadoAmigosPrest.txt
fi

for f in $( ls PRESTAMOS/*.pre | sort ); do
ruta=${f##*/}
nombreAmigo=${ruta%.*}
echo -e "$nombreAmigo" >> LISTADOS/ListadoAmigosPrest.txt
done

echo -e "\n**************************************************"
echo -e "+++ LISTADO ALFABÉTICO DE AMIGOS CON PRÉSTAMOS +++"
echo -e "**************************************************"

cat LISTADOS/ListadoAmigosPrest.txt

read -p "Pulse para continuar..."

DEVOLVER LIBROS
#!/bin/bash
#Obtenemos el nombre del amigo que devuelve los libros y eliminamos del
#directorio PRESTAMOS el archivo cuyo nombre se corresponede con el de
#dicho amigo
echo -e "Introduzca el nombre del amigo: "
read amigo

if [ -f "PRESTAMOS/$amigo.pre" ]; then
rm "PRESTAMOS/$amigo.pre"
echo -e "Los libros han sido devueltos"
else
echo -e "El amigo no existe o no tiene libros prestados\n"
fi
read -p "Pulse para continuar..."

BUSCAR LIBROS
#!/bin/bash
echo -e "Introduzca el título a buscar: "
read tituloBuscado

cat LIBROS/*.lib |grep "$tituloBuscado" >temp.tmp
encontrado=`stat -c%s "temp.tmp"`

if [ $encontrado -eq 0 ]; then
echo -e "No se ha encontrado el libro indicado\n"
else
echo -e "El libro se encuentra en la biblioteca\n"
fi
rm temp.tmp
read -p "Pulse para continuar..."

No hay comentarios:

Publicar un comentario