Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: dark_fidodido en 28 Octubre 2009, 12:39 pm



Título: Shell Script y MySql
Publicado por: dark_fidodido en 28 Octubre 2009, 12:39 pm
Bueno un paso mas despues de familiarizarme con Shell Script
Cuales son los comandos de MySql para utilizarlos en un Scrpt no he encontrado nada, solo para php y a mi me interesa tratar las tablas y los campos desde un script de shell...

Si me pasarais algun manual o algunos ejemplos me vendrian genial

Gracias!!!


Título: Re: Shell Script y MySql
Publicado por: ^Tifa^ en 28 Octubre 2009, 17:49 pm
Si manejas un poco la creacion de Scripts en bash, y conoces un poco el funcionamiento del lenguaje SQL (precisamente MySQL) no es tan complicado. Por ejemplo, te hice un ejemplillo personal;

Código
  1.  
  2. #!/bin/bash -x
  3.  
  4. MYSQL="mysql -u $1 -p$2"
  5. menu="\n********Menu*********\n1 - Ver Tablas\n2 - Ver datos Tablas\n3 - Insertar datos\n4 - Salir\n"
  6.  
  7. if [ -z $1 ] || [ -z $2 ]; then
  8.  echo Para ejecutarme coloca ./programa.sh  usuario  contrasena
  9. exit 0;
  10. fi
  11.  
  12. while [ "$opcion" != "4" ]; do
  13.  
  14. echo -e $menu
  15. read opcion
  16.  
  17. case $opcion in
  18. 1)
  19. $MYSQL << END
  20.      use primaria;
  21.      show tables;
  22. END
  23. sleep 02
  24. ;;
  25. 2)
  26.  
  27.  printf "Inserta nombre de la tabla :: "
  28.  read tablas
  29.  
  30. $MYSQL << END
  31.      use primaria;
  32.      select * from $tablas;
  33. END
  34. sleep 02
  35. ;;
  36. 3)
  37.  
  38.    printf "Inserta nombre de la tabla :: "
  39.    read tablas
  40.    echo Inserta valores a incluir en la tabla ::
  41.    read valores
  42.  
  43. $MYSQL << END
  44.      use primaria;
  45.      insert into $tablas values($valores);
  46. END
  47. sleep 02
  48. ;;
  49. 4)
  50. exit $?
  51. ;;
  52. esac
  53.  
  54. done
  55.  
  56. exit 0;
  57.  
  58.  
  59.  


Título: Re: Shell Script y MySql
Publicado por: dark_fidodido en 30 Octubre 2009, 16:30 pm
mmmmm
algo asi ya intenté pero a mi solo me salia en el scrip el panes de control de mysql, no introducia las lineas de codigo, sólo cuando salía de mysql y claro me daba error por que la sintaxis no era correcta ^^
creo k para eso necesito algo de unos módulos DBI no?

gracias compañero

He probado el script, y me ha alegrado ver que funciona, lo malo es que me pide contraseña continuamente, lo he tenido que modificar un poco y claro yo necesito que funcione en background
Lo de la contraseña siempre me ha pasado me da un error cuando se la pongo en linea de comandos y solo puedo acceder a traves del comando # mysql -r -p
^^


Título: Re: Shell Script y MySql
Publicado por: ^Tifa^ en 30 Octubre 2009, 19:52 pm
Citar
algo asi ya intenté pero a mi solo me salia en el scrip el panes de control de mysql, no introducia las lineas de codigo, sólo cuando salía de mysql y claro me daba error por que la sintaxis no era correcta ^^
creo k para eso necesito algo de unos módulos DBI no?

No. Revisa bien la sintaxis que aplicaste para dicho Shell Script para verificar porque te fallo, ya que el modulo DBI es aplicable exclusivamente para Perl conectarse a distintas base de datos relacionales  ;)  y hasta el momento estas comentando que quieres conectarte a traves de Bash no de Perl, para tu caso basta con procesar comandos de MySQL y realizar consultas como el ejemplo que te di... para tu caso (Bash+Mysql) no requieres ningun modulo o Api de MySQL.

Citar
He probado el script, y me ha alegrado ver que funciona, lo malo es que me pide contraseña continuamente, lo he tenido que modificar un poco y claro yo necesito que funcione en background

Precisamente los parametros $1 $2  hacen referencia en este caso a lo que insertes en linea de comando 'usuario' y 'contrasena' si quieres puedes ponerlo automatico, declarando una variable:

MYSQL="mysql -u  usuario  -pcontrasena'

Y ya esto te funcionara sin necesidad de ingresar usuario y contrasena.

$MYSQL << END
      use primaria;
      show tables;
END




Título: Re: Shell Script y MySql
Publicado por: dark_fidodido en 3 Noviembre 2009, 09:42 am
ok, tienes razon a la hora de conecta con mysql de la forma:

MYSQL="mysql -u  usuario  -pcontrasena'

yo lo intentaba como:

MYSQL="mysql -u  usuario  -p=contraseña'

y claro no me iba...
gracias

Para sustituir un dato de una tabla....?
ya es pasando los comandos normales de mysql a una variable no?

por cierto una dudilla que tengo sobre este script

cuando llamas a la variable $MYSQL en los cases, por qeí le redireccionas un END y luego otro al final?
supongo que el 2º es para terminar la conexión a la database, pero el 1º ni idea Oo


Título: Re: Shell Script y MySql
Publicado por: dark_fidodido en 3 Noviembre 2009, 14:14 pm
Jue y ademas esto no me funciona ahora dentro de una "function" en un case

$MYSQL << END
...
...
...
END

eso por k puede ser??
me da un error:

line 453: syntax error: unexpected end of file


la salida END no la soporta dentro de "function"?

Modifico:
no me hagais caso era problema de los tabuladores ^^

pero ahora no me acepta las variables dentro de las llamadas a las bases de datos de mysql
xDDD
quito un problema y me salen 100 enanos....


Título: Re: Shell Script y MySql
Publicado por: ^Tifa^ en 6 Noviembre 2009, 19:07 pm
Disculpa cielo por la tardanza  :rolleyes:  es que pues... no suelo visitar mucho este subforo por ende no me entero de las actualizaciones de los temas  ;)

Citar
pero ahora no me acepta las variables dentro de las llamadas a las bases de datos de mysql
xDDD

Literalmente no logro entender a que te refieres, podrias postear la parte del codigo donde te da el fallo y que es lo que intentas llamar de este  ;)

Todo es manejar de forma intermedia la sintaxis de Bash y conocer pelin sobre consultas SQL en MySQL, no es tan complicado como parece corazon  :-*


Título: Re: Shell Script y MySql
Publicado por: dark_fidodido en 9 Noviembre 2009, 09:51 am
ya, si sobre consultas sé un rato y sobre bash o shell de linux tambien.
Ya resolvi el problema parece y es que las variables cuando las llamo por consultas tengo que meterlas entre comillas simples para que me las reconozca...


MYSQL='mysql -r -pContraseña'
$MYSQL << END
use tabla;
update $dato1 set tabla2='$dato2' where tabla3='$dato3'; (aquie es dnd no me reconocia las variables)
END (mi primer fallo fue pones este END con tabulador, el cual descubri que tiene que estar al principio de linea para que reconozca la salida el mysql)

gracias


Título: Re: Shell Script y MySql
Publicado por: ^Tifa^ en 10 Noviembre 2009, 14:39 pm
Me alegro por ti cielo  ;) 

Continua aprendiendo  ;-)


Título: Re: Shell Script y MySql
Publicado por: dark_fidodido en 11 Noviembre 2009, 09:38 am
jajaja tiene gracia como hablas, son las mimas frase k me dice mi awela  :)

gracias a ti apañá xD


Título: Re: Shell Script y MySql
Publicado por: nenicita en 11 Noviembre 2009, 12:23 pm
Tengo una consulta, si necesito los datos de las consultas q realizo como puedo meterlas estas en un archivo o ... donde se guardan? por ejemplo un select count...
Espero alguien sepa como hacerlo
muchisimas gracias


Título: Re: Shell Script y MySql
Publicado por: ^Tifa^ en 11 Noviembre 2009, 13:45 pm
En Bash (Que es el tema tratado en este post)

Código
  1.  
  2. #!/bin/sh -x
  3.  
  4. MYSQL="mysql -u usuario  -pcontrasena"
  5.  
  6. $MYSQL << END 1>/home/usuario/archivo.txt
  7.  
  8. use primaria;
  9. show tables;
  10. select * from ejemplo;
  11. select count(*) from ejemplo;
  12.  
  13. END
  14.  
  15. exit 0;
  16.  
  17.  

Escribiria en la ruta indicada en el redireccionamiento de STDOUT al archivo indicado 'archivo.txt'

Ahora si te refieres a hacerlo en otro lenguaje (No precisamente un Script de Bash) ya es otro tema a abarcar  ;)


Título: Re: Shell Script y MySql
Publicado por: ^Tifa^ en 11 Noviembre 2009, 13:50 pm
Puede que no haya entendido del todo tu pregunta nenicita. Pero si te refieres donde la base de datos guarda las consultas que X usuario va realizando, dependiendo el motor se manejara dicho asunto, pero todas las guardan en la cache de memoria ram  ;)  En el caso de MySQL hay capacidad de activar un parametro en el archivo de configuracion o iniciar MySQL con esta opcion habilitada, donde se registra en un archivo todas las consultas realizadas que tomen mas de X cantidad de tiempo en retornar registros (El tiempo es modificado por el admin de la DB) pero esta opcion por lo general se deja desactivada porque genera unos logs enormes y que te ocupan mucho espacio sin necesidad tanto del espacio del disco duro como de la cache de ram. Y por lo general dicha opcion solo se activa a la hora de depurar el motor para verificar exactamente que consulta esta tomando tanto tiempo en retornar registros...

Un saludo  ;)


Título: Re: Shell Script y MySql
Publicado por: nenicita en 11 Noviembre 2009, 14:37 pm
Entendiste bien mi pregunta muchas gracias, lo probare y comento como me fue , necesito guardar los resultados de mi consulta para luego trabajar con ellos.