Foros del Web » Administración de Sistemas » Unix / Linux »

Uso de parametros en script .sh

Estas en el tema de Uso de parametros en script .sh en el foro de Unix / Linux en Foros del Web. Buenas gente, Tengo una duda que no me deja continuar con un script que estoy haciendo. Seguro que es una tonteria. A mi script se ...
  #1 (permalink)  
Antiguo 23/01/2014, 09:11
 
Fecha de Ingreso: agosto-2006
Mensajes: 174
Antigüedad: 14 años, 6 meses
Puntos: 2
Uso de parametros en script .sh

Buenas gente,

Tengo una duda que no me deja continuar con un script que estoy haciendo. Seguro que es una tonteria.

A mi script se le pasa varios parametros. Uno de ellos es el que tengo que usar para lo siguiente:


- Tengo un array donde contengo los posibles valores de ese parametro
- Tengo varios arrays mas donde tengo metida informacion en funcion del valor que se pasa por parametro.
- Hago una verificacion de que ese parametro esta dentro del array con una funcion contains que me implemente.

lista_ok=("campus1" "campus2" "campus3")
g_campus1=("2011" "2012" "2013")
g_campus2=("2011" "2012" "2013")
g_campus3=("2013" "2014")

Mi duda esta en como puedo programar mi script para que despues de chequear que el parametro esta dentro de la "lista_ok", me recorra el array correspondiente g_<nombreParametro>. De forma que si yo le paso como parametro "campus1", me recorra g_campus1....

Muchas gracias
  #2 (permalink)  
Antiguo 23/01/2014, 11:14
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Uso de parametros en script .sh

Antes que nada, déjame decirte que lo que estás haciendo no se adapta a lo que un script está diseñado para hacer. Cuando se trata de manipulación de cadenas y variables de esta manera, tu mejor opción es usar Perl o Python.

Dicho eso, usualmente se puede utilizar sustitución de variables:
Código BASH:
Ver original
  1. var="mivar"
  2. mivar="hola"
  3. echo ${!var} # imprime "hola"
Pero eso no es válido en los casos en los que el nombre de la variable es solo parcialmente el contenido de otra, como en tu caso. Nada impide, sin embargo, que utilices otra variable como intermedia para formar el nombre:
Código BASH:
Ver original
  1. parametro=campus1
  2. nombre_array=g_$parametro
  3. array_correcto=${!nombre_array}
Otra forma de hacerlo es vía eval, pero eso no juega bien con un array.

Como nota final: esto es válido solamente en BASH, y la verdad no suele ser una buena idea. Aunque resulte más tedioso, sería mejor utilizar case (ya que no tenemos matrices asociativas disponibles) por portabilidad y legibilidad futura.


Saludos.
  #3 (permalink)  
Antiguo 23/01/2014, 14:35
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 13 años, 1 mes
Puntos: 57
Respuesta: Uso de parametros en script .sh

Una solucion podria ser que utilizaras arreglos asociativos. Haciendolo asi seria mucho mas facil acceder a ciertos valores utilizando una variable como indice dentro del arreglo.

Por ejemplo:
Código BASH:
Ver original
  1. declare -A lista_ok
  2. lista_ok["campus1"]="campus11 campus12 campus13"
  3. lista_ok["campus2"]="campus21 campus22 campus23"
  4. lista_ok["campus3"]="campus31 campus32 campus33"
  5.  
  6. #Una condicion para verificar que se este accediendo a un elemento que contiene valores
  7. valor="campus4"
  8. if [[ -z ${lista_ok[$valor]} ]]; then
  9.   echo $valor no contiene datos;
  10. else
  11.   echo $valor si contiene datos
  12. fi
  13.  
  14. #Para recorrer los valores de "campus1"
  15. valor="campus1"
  16. for v in ${lista_ok[$valor]}; do echo $v; done
Si te fijas, en la asignacion de valores de lista_ok se esta asignando una cadena y no un arreglo. En BASH no existen los arreglos multidimensionales.

Última edición por posman; 23/01/2014 a las 14:54

Etiquetas: ip, parametros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:42.