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

Devolver resultados en shell script

Estas en el tema de Devolver resultados en shell script en el foro de Unix / Linux en Foros del Web. Hola, ¿se pueden devolver variables en un shell script? Gracias...
  #1 (permalink)  
Antiguo 01/03/2011, 07:44
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 4 meses
Puntos: 2
Devolver resultados en shell script

Hola,

¿se pueden devolver variables en un shell script?

Gracias
  #2 (permalink)  
Antiguo 01/03/2011, 08:15
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Devolver resultados en shell script

Si.

¿alguna otra pregunta o problema más específico?

Ya en serio, da más detalles de lo que querés hacer.


Saludos.
  #3 (permalink)  
Antiguo 01/03/2011, 09:57
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Devolver resultados en shell script

hola:

De hecho, depende de lo q llames "devolver variables".
Un script devuelve un valor numérico como código de salida del script. Por defecto es el código de salida del último comando ejecutado dentro del script. Si quieres devolver un valor en específico lo puedes hacer mediante:
Código BASH:
Ver original
  1. exit X
donde X es un literal o variable de tipo numérico.
Usualmente el código de salida del script (y de cualquier programa) se utiliza para saber como finalizó su ejecución. Por convenio 0 es q finalizó correctamente, diferente de 0 es q hubo errores.
Puedes tomar el código de salida de script mediante la variable $?
Por ejemplo:
Código BASH:
Ver original
  1. $> ./miscript.sh
  2. $> echo $?
  3. 0

Dale un vistazo a:
http://tldp.org/LDP/abs/html/exit-status.html

saludos;

Nup_
  #4 (permalink)  
Antiguo 02/03/2011, 02:42
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 4 meses
Puntos: 2
Respuesta: Devolver resultados en shell script

De acuerdo, gracias a los dos por vuestras respuestas.

He utilizado exit pero solo se pueden devolver valores numéricos no?

A ver explico lo que quiero hacer. En mi script proceso un fichero de texto con awk para obtener dos valores:

Código BASH:
Ver original
  1. WIDTH=$(awk '/Width/ { print $3 }' fichero.txt)
  2. HEIGHT=$(awk '/Height/ { print $3 }' fichero.txt)

Así obtengo los datos widht y height. Pero lo que necesito es que el script me devuelva, si por ejemplo, width es 800 y height es 600, quiero que me devuelva 800x600. He probado poniendo:

Código BASH:
Ver original
  1. exit $WIDTH\x$HEIGHT

Pero me dice que requiere un argumento numérico. ¿Cómo podría resolverlo?

He pensado ejecutar primero un script que me devuelva el valor de width, luego otro que me devuelva el valor de height, y luego unir los valores tal y como deseo utilizando python, que es el lenguaje que uso para ejecutar esos scripts, pero me parece demasiado engorroso. ¿Cómo lo veis vosotros?

Saludos
  #5 (permalink)  
Antiguo 02/03/2011, 03:35
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 4 meses
Puntos: 2
Respuesta: Devolver resultados en shell script

Bueno, he decido usar la solución que proponía de ejecutar dos veces el script para obtener cada valor.

El caso es que que parece que no me devuelve bien el valor. Si tengo en la variable SIZE el valor que quiero pasar y pongo:

Código BASH:
Ver original
  1. exit $SIZE

Me devuelve un valor numérico pero no el valor de SIZE.
  #6 (permalink)  
Antiguo 02/03/2011, 07:08
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Devolver resultados en shell script

Hola:

El valor de salida no se usa para eso.
Si lo q quieres hacer es devolver un valor compuesto por otros valores, lo q te recomiendo es q lo imprimas por la salida estándar y después mediante un pipe | lo pases a otro script.

Ejemplo:
Tu script
Código BASH:
Ver original
  1. WIDTH=$(awk '/Width/ { print $3 }' fichero.txt)
  2. HEIGHT=$(awk '/Height/ { print $3 }' fichero.txt)
  3. echo "$WIDTH""x""$HEIGHT"

Después puedes redirigir la salida de ese script como entrada a otro script:
Código BASH:
Ver original
  1. ./tuscript.sh | ./miotroscript.sh

En miotroscript.sh puedes leer la entrada mediante
Código BASH:
Ver original
  1. read VARIABLE


También puedes hacer esto:
En otroscript.sh
Código BASH:
Ver original
  1. SIZE=`bash miscript.sh`
  2. # En $SIZE se va a guardar lo q imprima miscript
  3. #  así q ahora puedo procesar $SIZE de la forma q necesite

saludos;

Nup_
  #7 (permalink)  
Antiguo 04/03/2011, 06:48
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 4 meses
Puntos: 2
Respuesta: Devolver resultados en shell script

Uff pensé que sería más sencillo XD

Es que resulta que yo no estoy ejecutando el script desde una consola linux, sino que lo ejecuto a través de código python.

Pensaré a ver si lo puedo resolver de otro modo.

Graciass
  #8 (permalink)  
Antiguo 04/03/2011, 09:00
Avatar de ociomax
Colaborador
 
Fecha de Ingreso: mayo-2002
Ubicación: Temuco, Chile
Mensajes: 5.595
Antigüedad: 21 años, 10 meses
Puntos: 35
Respuesta: Devolver resultados en shell script

¿Cómo lo estás ejecutando desde Python? Si no recuerdo mal, os.system te permite capturar el código de salida.
__________________
Christian González, "OCIOMax"
http://chgonzalez.blogspot.com
http://twitter.com/chgonzalez
  #9 (permalink)  
Antiguo 04/03/2011, 09:07
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 4 meses
Puntos: 2
Respuesta: Devolver resultados en shell script

Ejecuto el script con os.system. Pero el problema es que no se como hacer que la salido del script que ejecuto sea el valor de la variable.
  #10 (permalink)  
Antiguo 04/03/2011, 13:43
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Devolver resultados en shell script

Hola:

En python puedes capturar la salida estándard de un comando mediante el módulo subprocess:

Código Python:
Ver original
  1. from subprocess import Popen, PIPE, STDOUT
  2. p = Popen('bash /tmp/miscript.sh', stdout=PIPE, stderr = STDOUT, shell=True)
  3. print p.stdout.read()

Si estás usando una versión de python superior a la 2.7:
Código Python:
Ver original
  1. p = subprocess.check_output(["bash", "/tmp/miscript.sh"],stderr=subprocess.STDOUT)
  2. print p

saludos;

Nup_
  #11 (permalink)  
Antiguo 04/03/2011, 13:45
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Devolver resultados en shell script

Hola:

En python puedes capturar la salida estándard de un comando mediante el módulo subprocess:

Código Python:
Ver original
  1. from subprocess import Popen, PIPE, STDOUT
  2. p = Popen('bash /tmp/miscript.sh', stdout=PIPE, stderr = STDOUT, shell=True)
  3. print p.stdout.read()

Si estás usando una versión de python superior a la 2.7:
Código Python:
Ver original
  1. p = subprocess.check_output(["bash", "/tmp/miscript.sh"],stderr=subprocess.STDOUT)
  2. print p

saludos;

Nup_
  #12 (permalink)  
Antiguo 07/03/2011, 07:38
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 4 meses
Puntos: 2
Respuesta: Devolver resultados en shell script

Voy a probarlo y ya os cuento si funciona. Muchas gracias ;)

Etiquetas: devolver, resultados, shell
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 07:13.