Problema con variables en script de linux

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: maiku, akodo

Responder
jferfie
Forista Nuevo
Forista Nuevo
Mensajes: 1
Registrado: Dom Jul 18, 2010 1:20 pm

Problema con variables en script de linux

Mensaje por jferfie »

Hola a todos:

Es la primera vez que escribo en el foro, a ver si alguien me puede ayudar con un problema que estoy teniendo con un script en linux.

De forma muy simplificada, quiero que el script muestre en contenido de uno de los argumentos pasados por línea de comandos.

Sería algo así:

#! /bin/bash
echo "Has introducido $# argumentos"
echo "Selecciona el argumento que quieres mostrar"
read numero
echo "El contenido del argumento $numero es $($numero)"

Si el usuario llama al script de esta forma

$ script argA argB argC

y luego indica que quiere que se muestre el argumento 2, se debería mostrar el contenido de $2, es decir "argB". Sin embargo, lo más que he conseguido es que se muestre

"El contenido del argumento 2 es $2"

Llevo varias horas peleándome, buscando por Google y no doy con la solución. Si alguien la conoce os lo agradecería.

Muchas gracias. Un saludo.

Avatar de Usuario
shicefgo
Forista Menor
Forista Menor
Mensajes: 53
Registrado: Lun May 10, 2010 1:00 am
Ubicación: Andalucía

Re: Problema con variables en script de linux

Mensaje por shicefgo »

Hola.
Bueno, daremos algunas pistas.

Al igual que $# contiene el nº total de argumentos, $@ contiene los argumentos, entendiendo por argumento una secuencia de caracteres separada de la siguiente por un espacio.

Una solución sería pasar todos los argumentos a un array, y mostrar el argumento pedido así:

echo ${array[$numero]}

pero eso tiene el inconveniente de que mostraría el argumento numero+1, ya que los arrays en bash comienzan por cero.

Otra pista que te puede venir bien es que en bash un array se puede formar así:

array=(uno dos tres cuatro)
echo ${array[2]}

El resultado de lo anterior será mostrar en pantalla 'tres', que es la posición 2 empezando por el cero.

Los paréntesis sirven para decirle a bash que las secuencias de caracteres separadas por espacios que hay dentro de ellos constituyen los elementos del array.

Y yastá. Ahora te toca pensar y, en todo caso, buscar en google. :wink:

Saludos.

mragonias
Forista Nuevo
Forista Nuevo
Mensajes: 2
Registrado: Dom May 08, 2011 2:25 am

Re: Problema con variables en script de linux

Mensaje por mragonias »

Se que esto es de hace tiempo, pero respondo a una muy buena pregunta, como hago utilizando el contenido numerico de una variable, osease $una_variable_numerica para representar $1, $2, ....
Claro, no se puede hacer $$numero, ni $($numero), pensando a ver si conseguimos que $numero valga 2 y asi quede como resultado $2 y a la vez este se substituya por el contenido del segundo argumento que hemos entrado en la linea de comando.
En vez de arrays, hay otra forma de enfocarlo, solo tienes que modificar una de las linea , en vez de :

echo "El contenido del argumento $numero es $($numero)"
prueba con:
eval echo "El contenido del argumento $numero es \$$numero"

El truco esta en el comando eval, este simplemente hace como una doble pasada, primero hace la substitucion de uno y luego ejecuta la segunda...primero transforma $numero (por ello protegemos el primer $ con una \ para que de momento no la tenga en cuenta), y luego el resultado lo pasa con el primer $.

Prueba y veras

Avatar de Usuario
niky45
Forista Ancestral
Forista Ancestral
Mensajes: 9186
Registrado: Jue Abr 12, 2007 7:00 am
Ubicación: tras la pantalla (...)
Contactar:

Re: Problema con variables en script de linux

Mensaje por niky45 »

prueba con esto:

Código: Seleccionar todo

eval last_arg=\$$#
echo "el ultimo argumento es $last_arg"
imagino que simplemente con \$$X, siendo X un numero, te dejara acceder a los demas.

PD: esto lo econtre por ahi para integrar screen con ssh.... :D

PD2: por si acaso:
http://www.etxea.net/docu/taller_bash/bash.html
http://tldp.org/LDP/abs/html/ ## en este creo que hay cosas por el estilo... :)
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]

mragonias
Forista Nuevo
Forista Nuevo
Mensajes: 2
Registrado: Dom May 08, 2011 2:25 am

Re: Problema con variables en script de linux

Mensaje por mragonias »

Si
imagino que simplemente con \$$X, siendo X un numero, te dejara acceder a los demas.
es mas o menos lo mismo que:
prueba con:
eval echo "El contenido del argumento $numero es \$$numero"
o directamente decir lo mismo

Responder
  • Temas similares
    Respuestas
    Vistas
    Último mensaje