[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: problema al programar scripts en bash.



Puede ser que a uno le pusiste return 0 y al otro exit 0.
Si. Le pones a los dos return 0



El 12 de marzo de 2019 4:42:24 p. m. GMT-03:00, Fran Torres <frantorresgallego@gmail.com> escribió:
Buenas chicos,

¿algún administrador de sistemas linux/programador de scripts en
bash-shell por la sala?.

Precisamente eso es lo que estudio como bien ya sabreis y, en clase
de sistemas operativos estamos haciendo programación básica de scripts
en shell. Mäs concretamente, estamos haciendo funciones. Os voy a
poner un código de ejemplo y debajo de él, un código alternativo. Al
final del segundo va la duda.

#!/bin/bash
function ShowUser(){
if [ $# -ne 1 ]; then
echo "error, se esperaba un argumento"
return 1
fi
login=$1
cmd=$(grep "^$login:" /etc/passwd)
echologin=$(echo $cmd /etc/passwd | cut -d: -f1)
uid=$(echo $cmd /etc/passwd | cut -d: -f3)
gid=$(echo $cmd /etc/passwd | cut -d: -f4)
dir=$(echo $cmd /etc/passwd | cut -d: -f6)
shll=$(echo $cmd /etc/passwd | cut -d: -f7)
if [ -z $cmd ]; then
echo "no se ha encontrado el usuario introducido"
else
echo "la información del usuario $echologin, es:\n uid: $uid \n gid:
$gid\n Directorio home: $dir|n shell de sistema: $shll\n"
return 0
fi
}

Ahora, el siguiente código:

#!/bin/bash
if [ $# -ne 1 ]; then
echo "error, se esperaba un argumento"
exit 1
fi
login=$1
cmd=$(grep "^$login:" /etc/passwd)
echologin=$(echo $cmd /etc/passwd | cut -d: -f1)
uid=$(echo $cmd /etc/passwd | cut -d: -f3)
gid=$(echo $cmd /etc/passwd | cut -d: -f4)
dir=$(echo $cmd /etc/passwd | cut -d: -f6)
shll=$(echo $cmd /etc/passwd | cut -d: -f7)
if [ -z $cmd ]; then
echo "error, no se ha encontrado el usuario especificado"
exit 2
else
echo "la información del usuario $echologin, es:\n uid: $uid \n gid:
$gid\n Directorio home: $dir|n shell de sistema: $shll\n"
exit 0
fi

Como podeis observar, ambos scripts son idénticos, salvo por que uno
lleva una función llamada showUSer, y sustituye los "exit" por
"return".
ambos scripts tienen el mismo comportamiento (código de status 0 por
lo que la ejecución es correcta)
Pero, ahora viene la salvedad del asunto.
El primer script, pese a terminar su ejecución con código de error 0,
no muestra absolutamente nada por stdout sobre la información que se
le pide (los echos).
Sin embargo, el segundo script si que lo muestra.

Alguien sabría decirme por qué, o donde estoy fallando yo?

Fran.


--
Enviado desde mi dispositivo Android con K-9 Mail. Por favor, disculpa mi brevedad.
Reply to: