
En mi trabajo diario uso muchos shell scripts y generalmente en ellos hago uso de ficheros para guardar la informacion temporalmente, estos ficheros almacenan datos que seran leidos posteriormente desde otros shell scripts.
Esto aunque es funcional, presenta en ocasiones graves inconvenientes:
Tiempos de lectura/escritura en disco que son elevados e innecesarios o aun peor cuando esos ficheros se borran accidentalmente y no puede recuperarse la informacion desde los mismos.
Asi que me pregunte: ¿No existira una manera mas elegante de realizar estas mismas funciones?.
Y las posibilidades como siempre son muchas. Esta vez sin embargo me decante por SQLite.
SQLite es una base de datos muy ligera que guarda la informacion de las tablas internamente en ficheros y permite recuperar los datos de filas y columnas mediante consultas SQL.
Se emplea en productos como Firefox, para almacenar la cache del navegador e informacion de configuracion, o por ejemplo en Amarok, para indexar la informacion de los mp3 que tenemos en el disco duro.
Es una base de datos que no es recomendable usar en entornos de produccion, pues no es este su proposito, pero para pequeñas cosas como las que comento de guardar poca informacion temporalmente nos puede venir muy bien.
Instalarla es tan simple como:
$ sudo apt-get install sqlite3
Entonces ya podemos ejecutar:
$ sqlite
Para acceder a su prompt de control.
Nota: en los ejemplo uso «sqlite» en lugar de «sqlite3», ello es por la version de SQLite instalada (si instalas una version inferior a la version 3, p.ej usaste apt-get install sqlite en lugar de apt-get install sqlite3«) el comando es «sqlite» para referenciar a la base de datos, en vez de «sqlite3».
Si la queremos usar desde la linea de comandos, recomiendo leer la documentacion de su sitio web.
Podriamos p.ejemplo crear una tabla y meter informacion en sus registros.
root@soledad:~# sqlite temp
SQLite version 2.8.17
Enter ".help" for instructions
sqlite> CREATE TABLE CACHE(ID varchar(100),NAME varchar(100),VALUE varchar(100));
sqlite> insert into CACHE values('Test01','NUMERO','1111199993');
sqlite> select * FROM CACHE;
Test01|NUMERO|1111199993
sqlite> insert into CACHE values('Test01','PROVISION','00000');
sqlite> select * FROM CACHE
...> ;
Test01|NUMERO|1111199993
Test01|PROVISION|00000
sqlite> select * FROM CACHE where NAME='PROVISION';
Test01|PROVISION|00000
sqlite> select VALUE FROM CACHE where NAME='PROVISION';
00000
sqlite> .quit
root@soledad:~# sqlite temp "SELECT VALUE FROM CACHE where NAME='PROVISION'";
00000
root@soledad:~# sqlite temp "INSERT INTO CACHE VALUES('Test02','NUMERO','11113333');"
root@soledad:~# sqlite temp "SELECT VALUE FROM CACHE";
1111199993
00000
11113333
Pero a mi me interesa usarla desde shell script. ¿Como puedo usarla?. pues muy simple. Los comandos serian:
VARIABLE=`sqlite base_de_datos "sentencia_SQL_a_ejecutar"`
Ejemplos:
sqlite temp "INSERT INTO TABLA VALUES('1','2')";
Inserta un registro en una tabla llamada TABLA de la base de datos (fichero) llamado «temp»
MI_DATA=`sqlite temp "select c from t where condicion='1'"`
echo "Recuperado $MI_DATA"
Ejecuta «select c from t where condicion=’1′» en una base de datos llamada «temp»
Estos ejemplos SQL son muy tontos y no funcionales, unicamente los pongo como ejemplo de como es la sintaxis.
Genial,verdad!!! se acabo el uso de ficheros en shell si no es extrictamente necesario.
De todas formas en la imagen adjunta al comienzo del post teneis un ejemplillo de libreria en bash para poder usar desde shell script.
Podeis utilizarla o crear la vuestra propia para por ejemplo almacenar notas, o configuraciones de maquinas, etc… las posibilidades son infinitas.
Y para diseñar el modelo de datos si no tienes ninguna tool a mano, puedes usar de manera online: wwwsqldesigner cuyo codigo podeis descargar desde Google code.
Para acabar, las bases de datos se crean ejecutando «sqlite nombre_de_la_base_de_datos» a secas:
$ sqlite3 mydb
Crearia una base de datos llamada «mydb» que realmente es un fichero del sistema de archivos.
entonces se abre el promt de la base de datos, y ya podemos crear la tablas, etc…
..
sqlite3> CREATE TABLE…
Mas informacion:
http://www.sqlite.org/cvstrac/wiki?p=ShellScript
http://snippets.dzone.com/posts/show/3080
http://mailliststock.wordpress.com/2007/03/01/sqlite-examples-with-bash-perl-and-python/
http://www.sqlite.org/index.html
Comentarios recientes