Linux/Unix Shell Scripting - test () &&

 
Vista:

test () &&

Publicado por duda (3 intervenciones) el 13/09/2017 14:38:05
Buenas

Estoy intentando hacer un ejemplo en el que si la variable no tiene valor me tiene que realizar dos acciones y sino salirse, es decir, si la variable tiene valor no tiene que hacerse el PASO010.
Lo he conseguido pero quiero hacerlo a través de un test y en una sola línea y me falla, me hace el PASO010 pero no se sale y sigue ejecutando la shell, ¿Cuál es el motivo?

Ejemplo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/sh
 
PASO010()
{
echo "No tiene valor variable. RC es: " $RC
exit $RC
}
 
RC=0
VAR=""
test $VAR || (RC=70 && PASO010)
 
echo "Tiene valor la variable RC es: " $RC
 
exit $RC
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

test () &&

Publicado por Tom (361 intervenciones) el 13/09/2017 17:09:04
Fácil. Lo que va entre () se ejecuta en un subshell. Por tanto el exit de PASO010 en tu ejemplo solo sale de esa subshell.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

test () &&

Publicado por duda (3 intervenciones) el 14/09/2017 13:09:09
Gracias Tom,

Eso me cuadra aunq no hubiera caido.

Si lo que quiero es que me ejecute cuando sea || el RC=70 y el PASO010 y se salga, que tendría que usar en el test?, corchetes? o de que manera se tiene que poner el

test $VAR || (RC=70 && PASO010) --> No quiero tener que poner dos exits en el PASO010 para que no me haga el echo FINAL.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

test () &&

Publicado por Tom (361 intervenciones) el 14/09/2017 15:46:55
No creo que lo que pretendes hacer sea muy ortodoxo ... por lo dehacer esa asignación "RC=70" ahí.
La forma sería usar llaves '{}' como las de la función, pero también tendrías que probarlo con cuidado.
En tu caso yp probaría:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh
 
PASO010() {
	echo "No tiene valor variable. Exit Code es: " $1
	exit $1
}
 
RC=0
VAR=""
test $VAR || PASO010 70
echo "No debe llegar aqui"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

test () &&

Publicado por duda (3 intervenciones) el 15/09/2017 09:06:44
Gracias Tom
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar