me estoy volviendo loco con el script...

buenas! estaba haciendo un script en shell, pero me estoy volviendo loco con un IF

if [ -n $1 ]
then
echo "$1 no nula";
else
echo "$1 nula";
exit;
fi

si lo pongo asi, sea $1 nula o no, entra por la primera condicion.

if [ ! -n $1 ]
then
echo "$1 nula";
else
echo "$1 no nula";
exit;
fi

si lo pongo asi, sea $1 nula o no, entra por el else.

no se si tengo el dia espeso y no estoy viendo algo muy evidente q hago mal, o q el fedora este se ha vuelto loco... o yo q se q pasa aqui...

ayudita please!
Ponle comillas al $1 en la condición del if.
kornshell escribió:Ponle comillas al $1 en la condición del if.

"-n" "$1" dices?
Ferdy escribió:No.

[+risas]

El script sería así:

#!/bin/bash
if [ -n "$1" ]
then
echo "$1 no nula";
else
echo "$1 nula";
exit
fi
Omega69 escribió:
Ferdy escribió:No.

[+risas]

El script sería así:

#!/bin/bash
if [ -n "$1" ]
then
echo "$1 no nula";
else
echo "$1 nula";
exit
fi

ahora parece q si funciona. gracias!
pero tengo otra dudilla... es posible redirigir la salida de un comando a una variable? algo asi como resultado= `mount $1 $2`;
de tal modo q lo q saque por pantalla el resultado de ese comando, se guarde en la variable.

Ferdy escribió:No.

gracias por tu gran aportacion!
NO



edito: he probado a hacer lo siguiente:

`mount $1 $2`>resultado.txt;
resultado=`cat resultado.txt`;

pero devuelva algo o no el comando, el archivo resultado.txt siempre esta vacio... :S
Darxen escribió: algo asi como resultado= `mount $1 $2`;

Darxen escribió:edito: he probado a hacer lo siguiente:

`mount $1 $2`>resultado.txt;
resultado=`cat resultado.txt`;

pero devuelva algo o no el comando, el archivo resultado.txt siempre esta vacio... :S


No te líes, lo que habías puesto primero se puede hacer así, no necesitas usar archivos.

Sobre lo que el comando devuelva algo, mírate en algún manual de bash las redirecciones de salidas de comandos porque hay dos: STDOUT y STDERR, y puedes elegir recoger una, la otra o ambas.
kornshell escribió:
Darxen escribió: algo asi como resultado= `mount $1 $2`;

Darxen escribió:edito: he probado a hacer lo siguiente:

`mount $1 $2`>resultado.txt;
resultado=`cat resultado.txt`;

pero devuelva algo o no el comando, el archivo resultado.txt siempre esta vacio... :S


No te líes, lo que habías puesto primero se puede hacer así, no necesitas usar archivos.

Sobre lo que el comando devuelva algo, mírate en algún manual de bash las redirecciones de salidas de comandos porque hay dos: STDOUT y STDERR, y puedes elegir recoger una, la otra o ambas.

si hago lo primero q he puesto la variable siempre sale vacia, no rellena nada.

sobre lo de STDOUT y STDERR he leido algo en google, q se usan poniendo algo asi como 2>&1 no? pero con eso tampoco me funciona :S


edito: estoy haciendo esto:

`umount $1`2>&resultado.txt;
resultado=`cat resultado.txt`;
if [ -n "$resultado" ]
then
echo $resultado;
exit;
fi

la cosa es q el umount, si todo va bien no devuelve nada, pero si algo falla lo saca por pantalla. por eso me lo quiero guardar en una variable y si falla me voy del script para q no siga haciendo cosas. pero tal y como esta puesto siempre me rellena resultado.txt con "commando not found" (refiriendose a umount) pero aun asi, me desmonta la unidad. entonces lo hace bien pero nunca sigue el script porq el archivo no es nulo, y entonces se va.
Para ese comando por ejemplo:
res=`mount $1 $2 2>&1`
kornshell escribió:Para ese comando por ejemplo:
res=`mount $1 $2 2>&1`

a ja já! ahora si! gracias!!! :D
Lo que tienes que hacer es comprobar el resultado y no la salida de los comandos ya que esta cambiará entre versiones, sistemas operativos, locales, ....
Ferdy escribió:Lo que tienes que hacer es comprobar el resultado y no la salida de los comandos ya que esta cambiará entre versiones, sistemas operativos, locales, ....

a mi lo q me interesa es q si el comando devuelve algo, lo q sea, q se salga del script ya q he podido comprobar q al menos en las distribuciones q uso, si todo va bien no devuelve nada
Darxen escribió:
Ferdy escribió:Lo que tienes que hacer es comprobar el resultado y no la salida de los comandos ya que esta cambiará entre versiones, sistemas operativos, locales, ....

a mi lo q me interesa es q si el comando devuelve algo, lo q sea, q se salga del script ya q he podido comprobar q al menos en las distribuciones q uso, si todo va bien no devuelve nada


Creo que Ferdy se refiere a que utilices la variable $?. Después de ejecutar un comando, $? contiene el resultado del comando: 0 si todo salió bien, cualquier otra cosa si hubo algún error.

Así sólo tendrías que comprobar si $? es distinto de 0 después de ejecutar el comando para saber si tienes que finalizar el script.
No hace falta comprobar $?. Lo más fácil es hacer:

if comando ; then
    algo
else
    otro
fi


La gente tiende a complicarse muchísimo la vida....

- ferdy
cambiamos de tematica y pregunta:

ahora la cosa es: se puede cambiar de directorio a partir de un script? yo pongo el comando cd y la ruta, pero en realidad no se ejecuta eso... he probado a ponerle q cree una carpeta despues de cambiar teoricamente de directorio, pero me la crea en el q estoy actualmente, es decir, el comando cd se lo pasa por el forro.

he mirado en google, pero no encuentro ningun modo... :S
Con cd se cambia el directorio. También puedes usar pushd y popd.
Ferdy escribió:Con cd se cambia el directorio. También puedes usar pushd y popd.

ya he dicho q con cd no me cambia el directorio desde el script...

el pushd parece q funciona... a ver si consigo q funcione como quiero
Nunca he tenido problema al usar cd en scripts, hace exáctamente lo que debe hacer, tal vez estés haciendo algo mal.
Darxen escribió:
Ferdy escribió:Con cd se cambia el directorio. También puedes usar pushd y popd.

ya he dicho q con cd no me cambia el directorio desde el script...

el pushd parece q funciona... a ver si consigo q funcione como quiero


Ya te hemos dicho que cd funciona.

HTH
Ferdy escribió:
Darxen escribió:
Ferdy escribió:Con cd se cambia el directorio. También puedes usar pushd y popd.

ya he dicho q con cd no me cambia el directorio desde el script...

el pushd parece q funciona... a ver si consigo q funcione como quiero


Ya te hemos dicho que cd funciona.

HTH

lo q querais, pero yo pongo:
cd /home/usuario/a/b;
mkdir aaaa;

y me crea la carpeta en el directorio desde el q he llamado al script, no al q le he dicho q se vaya con el cd. con el pushd si lo hace
akira@Mothra ~ $ vim dir.sh
akira@Mothra ~ $ chmod u+x dir.sh
akira@Mothra ~ $ ./dir.sh
#!/bin/sh
cd Documents/
mkdir a
akira@Mothra ~ $ cd Documents/
a/  xarxes/
Yog-Sothoth escribió:
akira@Mothra ~ $ vim dir.sh
akira@Mothra ~ $ chmod u+x dir.sh
akira@Mothra ~ $ ./dir.sh
#!/bin/sh
cd Documents/
mkdir a
akira@Mothra ~ $ cd Documents/
a/  xarxes/

q no q no, q no me lo hace... q ya lo he intentado y solo me funciona con pushd
Obviamente, no es lo mismo que el script se ejecute en el proceso de shell actual que que se haga en un proceso distinto.
bueno, si cd se ha enfadado contigo, no lo uses:

mkdir /home/usuario/a/b/aaaa


no?
La historia es, si no entiendes por qué cd no está funcionando, vas a tener muchos más problemas cuando quieras hacer cosas no triviales.
makelele24 está baneado por "troll multinicks"
Darxen escribió:
Yog-Sothoth escribió:
akira@Mothra ~ $ vim dir.sh
akira@Mothra ~ $ chmod u+x dir.sh
akira@Mothra ~ $ ./dir.sh
#!/bin/sh
cd Documents/
mkdir a
akira@Mothra ~ $ cd Documents/
a/  xarxes/

q no q no, q no me lo hace... q ya lo he intentado y solo me funciona con pushd


demuestra que no funciona.. copia unas capturas de pantalla-texto...
Ferdy escribió:La historia es, si no entiendes por qué cd no está funcionando, vas a tener muchos más problemas cuando quieras hacer cosas no triviales.

pues no, no tengo ni idea de por q no funciona. si hago el comando a mano funciona bien, pero si lo hago mediante script no. he probado a ponerlo entre comillas invertidas y sin ellas, pero nada.

makelele24 escribió:demuestra que no funciona.. copia unas capturas de pantalla-texto...

en serio crees q no tengo nada mejor q hacer q mentir en un foro en el q encima me estan ayudando? q no funciona, joe... q yo q se por q no funciona. quiza sea por estar usando una maquina virtual y eso no le mole, o quiza sea q las mariposas de la primavera se han confabulado para q no funcione. no tengo ni idea, pero el caso es q yo pongo el comando en el script y no chuta
lo que esta claro es que lo estas haciendo MAL, porque eso FUNCIONA
Darxen escribió:en serio crees q no tengo nada mejor q hacer q mentir en un foro en el q encima me estan ayudando? q no funciona, joe... q yo q se por q no funciona. quiza sea por estar usando una maquina virtual y eso no le mole, o quiza sea q las mariposas de la primavera se han confabulado para q no funcione. no tengo ni idea, pero el caso es q yo pongo el comando en el script y no chuta

A ver, centrate.

A TI no te va. Igual es que, como te han dicho, estas haciendo algo MAL y NO sabes como funciona...
Crees que el resto si te mienten cuando dicen que si que funciona? Y no, no tendra nada que ver la maquina virtual. Quiza las mariposas esas...
29 respuestas