Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 5 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Dom Jul 18, 2010 5:20 am
Mensajes: 1

Nota Publicado: Dom Jul 18, 2010 5:21 am 
Arriba  
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.

 Perfil Email  

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Dom May 09, 2010 5:00 pm
Mensajes: 53
Ubicación: Andalucía

Nota Publicado: Lun Jul 19, 2010 3:21 am 
Arriba  
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.

 Perfil Email  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Sab May 07, 2011 6:25 pm
Mensajes: 2

Nota Publicado: Sab May 07, 2011 6:44 pm 
Arriba  
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

 Perfil Email  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Dom May 08, 2011 3:33 am 
Arriba  
prueba con esto:

Código:
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

--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me...
(from comp.os.linux.misc)
[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil Email WWW  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Sab May 07, 2011 6:25 pm
Mensajes: 2

Nota Publicado: Dom May 08, 2011 3:55 am 
Arriba  
Si
Citar:
imagino que simplemente con \$$X, siendo X un numero, te dejara acceder a los demas.


es mas o menos lo mismo que:
Citar:
prueba con:
eval echo "El contenido del argumento $numero es \$$numero"

o directamente decir lo mismo

 Perfil Email  
Mostrar mensajes previos:  Ordenar por  
 [ 5 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO