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

Re: problema al programar scripts en bash.



On Tuesday, March 12, 2019 8:42:24 PM -03 Fran Torres wrote:
> 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.

Buenas
es que en el primer script solo esta la funcion...
nunca la llamas...
ejemplo agregale al primer script abajo de todo

ShowUser USER


USER = a un usuario de sistema o algo.
y te va andar.

si pones solo la funcion sin ningun usuario
te va a devolver el error:

'echo "error, se esperaba un argumento"'

no se si entendio pero creo que si..
en definitiva tenes que llamar la funcion cuando
la queres usar...

saludos.
Matias.-



Reply to: