Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Echizen en 11 Junio 2016, 03:07 am



Título: Bash script: variable array
Publicado por: Echizen en 11 Junio 2016, 03:07 am
Buenas tardes a todos,

Tengo un problema con la forma en que se asigna valor a una variable de tipo array. Paso a explicar mostrando el codigo:

Código
  1. #Se declara una variable de tipo array y se le asignan 4 valores
  2. declare -a var=('192.168.1.1' 'Planta baja' '192.168.1.2' 'Planta alta')
  3.  
  4. #Se muestra la variable completa
  5. echo "${var[@]}"
  6.  
  7.  

Al ejecutar el codigo, se obtiene el siguiente resultado. Notar que no muestra las comillas simples

Código
  1. 192.168.1.1 Planta baja 192.168.1.2 Planta alta
  2.  


Ahora vamos a lo lindo. Completar la variable con el resultado de una consulta de SQL

Código
  1. #Cadena de conexion
  2. Conexion="mysql -h IP_DB_HOST DBNAME -uUSER -pPASS -e"
  3. #Consulta de SQL
  4. SELECT="SELECT ip,descripcion FROM DB.tabla;"
  5.  
  6. #Se declara la variable de tipo array y se ejecuta la consulta de SQL descartando el encabezado y los errores de la misma
  7. #Luego se agregan comillas simples a cada "row" de la consulta y se quitan saltos de linea..
  8. declare -a query=$($Conexion "$SELECT" -N 2> /dev/null | sed "s/\t/' '/g;s/^/'/;s/$/'/" | sed ':a;N;$!ba;s/\n/ /g')
  9.  
  10.  
  11. #ahora, se imprime en pantalla la variable
  12. echo -e "${query[@]}"
  13.  
  14.  


Al momento de ejecutar el codigo, vemos que se obtiene el mismo resultado, con la diferencia de que ahora si muestra las comillas simples

Código
  1. '192.168.1.1' 'Planta baja' '192.168.1.2' 'Planta alta'
  2.  


Ahora, la explicación del problema...

Necesito pasar la variable como parametro para crear un box de menu utilizando el comando "dialog"

ejemplo:
Código
  1.        exec 3>&1
  2.        selection_menu=$(dialog \
  3.        --backtitle "$BACKTITLE" \
  4.        --title "$1" \
  5.        --clear \
  6.        --cancel-label "Volver" \
  7.        --menu "$2" 0 0 4 \
  8.        "${query[@]}" \                    # aqui es donde se inserta la variable
  9.        2>&1 1>&3)
  10.  

el problema que tengo, es que en el primer ejemplo (donde se crea la variable manualmente), el script funciona perfecto, pero cuando creo la variable y le asigno los valores de la consulta de sql, el comando "dialog" me informa que no se obtuvieron la cantidad de parámetros esperados.

Se que es bastante rebuscada la consulta, pero..... alguna idea?????

Desde ya agradezco su ayuda!

Saludos!


Título: Re: Bash script: variable array
Publicado por: Rav3nS en 12 Junio 2016, 02:41 am
Has probado con bash -x para ver que parametros le estas pasando al dialog?
A partir de ahi podrias modificar para que le entrase lo que tu quisieras y funcionara


Título: Re: Bash script: variable array
Publicado por: Echizen en 12 Junio 2016, 03:56 am
desconozco como utilizar el bash -x para tal fin.

cual seria la idea, poner en medio del script la sentencia "bash -x $variable" para saber que valor tiene asignado?