enero 07, 2011

Creando script para bash, primera aproximación

Y bueno, hace tiempo que no posteaba... tenía varias ideas, pero nada de tiempo... hasta que por fin me ha dado por escribir, algo que si bien no es muy práctico, para algunos puede ser simpático y/o útil.

He comenzado con esto de escribir scripts... el primero fue uno para bajar un manga (Bakuman) desde el sitio http://www.animextremist.com (manga que recomiendo mucho)

El tema es que luego me ha picado el bicho de optimizar algunas tareas, así que trabajo en ello. Aquí presento mi script para bajar algunos software del sitio de AutoDesk, como lo son AutoCad Inventor 2010 y AutoCad 2010, en versiones en español para 32 y 64 bits.

A continuación, el código


#! /bin/bash
clear
echo Escriba qué software desea descargar
echo
echo [1] AutoCAD Inventor 2010 Student Version Spanish 32bit
echo [2] AutoCAD Inventor 2010 Student Version Spanish 64bit
echo [3] AutoCAD 2010 Spanish 32bit
echo [4] AutoCAD 2010 Spanish 64bit
echo
same="http://studentsdownload.autodesk.com/ef"
read ans
case $ans in
[1]* ) soft="AutoCAD Inventor 2010 Student Version Spanish 32bit"
url="$same/47549/293/3262293/AutoCAD_Inventor_2010_Student_Versio
n_Spanish_Win_32bit.exe"
;;
[2]* ) soft="AutoCAD Inventor 2010 Student Version Spanish 64bit"
url="$same/47549/283/3262283/AutoCAD_Inventor_2010_Student_Versio
n_Spanish_Win_64bit.exe"
;;
[3]* ) soft="AutoCAD Inventor 2010 Student Version Spanish 64bit"
url="$same/47549/93/2755093/AutoCAD_2010_Spanish_MLD_WIN_32bit.exe"
;;
[4]* ) soft="AutoCAD Inventor 2010 Student Version Spanish 64bit"
url="$same/47549/83/2755083/AutoCAD_2010_Spanish_MLD_WIN_64bit.exe"
;;
* ) clear ; echo No ha ingresado un valor correcto. ; sleep 1 ;
echo Se aborta la descarga. ; sleep 3 ; clear ; exit
;;
esac
clear
echo "Se incia la descarga de "$soft" en "
echo $HOME/Descargas " ,desea continuar [S/n]?"
read resp
case $resp in
[Ss]* ) mkdir -p $HOME/Descargas
cd $HOME/Descargas
directorio="$HOME/Descargas"
;;
[Nn]* ) echo ; echo "Desea especificar otro destino de descarga [S/n]?"
read resp2
case $resp2 in
[Ss]* ) echo "Especifique el directorio de descarga:"
read directorio
mkdir -p $directorio ; cd $directorio
;;
[Nn]* ) clear ; echo Se aborta la descarga ; sleep 3 ; exit
;;
* ) clear ; echo Opción no válida ; echo Se aborta la descarga ; sleep 3
exit
;;
esac
;;
* ) clear ; echo Se aborta la descarga ; sleep 3 ; exit
;;
esac

wget -q -c $url &
sleep 2
clear
echo "Ha comenzado la descarga de $soft exitosamente." ; echo
echo Ésta se realiza en segundo plano ; sleep 3 ; echo

cd $directorio
while true ; do
clear
echo Ahora puede cerrar la ventana.
echo Si quiere detener la descarga, escriba en una consola
echo "killall wget"
echo
echo "Se han descargado"
du -h AutoCAD_*
sleep 1
done



Qué hace esto? En realidad es un trabajo en progreso...

  1. Te muestra una lista de programas disponibles para la descarga, asociados a un número. Tú debes elegir algún número (de lo contrario el programa se cierra) para descargar.
  2. Te pregunta si quieres descargar el archivo en /home/usuario/Descargas, o de lo contrario, indicar dónde se descargarán los archivos.
  3. Comienza la descarga, y la deja en segundo plano, de manera de que al cerrar la consola, la descarga no se interrumpa.
  4. Te muestra cuánto se ha descargado del archivo.
Problemas, o más bien, cosas a optimizar
  1. Decir cuánto pesa el archivo, y decir si es que en el directorio de la descarga hay espacio suficiente para tal efecto.
  2. Encontrar un método más efectivo para pausar/cancelar la descarga. Actualmente el único método es matando el proceso killall wget
  3. Mostrar el estado de la descarga en forma porcentual. Y de manera más ambiciosa, el tiempo estimado de descarga.
  4. Mejorar la gramática, puesto que siento que el usuario toma demasiadas decisiones... Tal vez debería ser más cabrón (como el apt-get install, que lo único que pregunta -cuando lo hace- es preguntar si se quiere realizar o no la descarga)
Bueno, como dije, es un work in progress, y a pesar de mis bajas expectativas, a tenido buena aceptación con mis amigos (relativamente)-computines.

Ventajas

  1. A pesar de ser algo incómodo, puedes ejecutar cuántas veces quieras el script, y seleccionar en cada una de esas veces, un software diferente. El programa comenzará la descarga simultáneamente de tus selecciones.
  2. El proceso de descarga es en segundo plano. (Pongo mejor mi ejemplo, para que se entienda la ventaja de esto: estaba en el trabajo, con el notebook, terminando el script en vez de trabajar, y una vez listo, lo corrí en el pc de escritorio de mi casa - por SSH. Así que cuando apagué el portátil, el proceso continuó descargando el Inventor en mi casa, y cuando llegué, la descarga ya se había realizado).
  3. No consume muchos recursos. Lo corrí en un pc medio viejo, y lo más que ocupó, fue un 3% de la CPU.

Eso de momento. A ver cómo termina este programilla. Qué opinas tú?
Related Posts with Thumbnails