[AYUDA] Shell-Script

Iniciado por syncro_7, 10 Octubre 2015, 20:29 PM

0 Miembros y 1 Visitante están viendo este tema.

syncro_7

Hola a todos, estoy empezando en el maravilloso mundo del Shell-Script y ya me he encontrado con el primer obstáculo. El problema es el siguiente:
Verifica que existe usuario e informa de su directorio de trabajo, UID, grupo y  shell. Cada dato en una línea y si no existe el usuario se informa de que "No existe"

Para ejecutarlo seria: ./existe usuario1 --> Y que me mostrase el contenido
Sino existe dicho usuario que me muestre el "Usuario no existe en el sistema"
Creo que el fallo está en la línea 4 pero es que no sé como acceder a /etc/passwd y verificar si el usuario existe.

Mi SHELL-SCRIPT
Código (bash) [Seleccionar]
#! /bin/bash
##Existencia del usuario

if [ $1 -eq /etc/passwd ];then
        usuario=$(grep "$1" /etc/passwd | cut -d ":" -f 1)
        uid=$(grep "$1" /etc/passwd | cut -d ":" -f 3);
        grupo=$(grep "$1" /etc/passwd | cut -d ":" -f 4);
        shell=$(grep "$1" /etc/passwd | cut -d ":" -f 7);
        ##Ahora hago los echo
        echo "El usuario es $usuario"
        echo "El uid es $uid"
        echo "El grupo es $grupo"
        echo "La shell en la que trabaja es $shell"
else
        echo "El usuario no existe en el sistema"
fi
exit;



daryo

esa comparacion no es correcta, si grep no devuelve nada entonces ya sabes que el usuario no existe
con la variable $? diferente de cero bash te muestra si tuvo un problema ejecutando el comando asi que:

prueba eso
Código (bash) [Seleccionar]
grep "$1" /etc/passwd
if [ "$?" == "0" ]; then
echo "aca va el proceso"
else
echo "no existe el usuario"
fi
buenas

syncro_7

Gracias por la respuesta daryo. Ya me ha funcionado, así lo tenía yo antes escrito, pero estoy buscando otra posible solución ¿Sabéis como hacerlo de otra manera?

daryo

#3
Cita de: syncro_7 en 10 Octubre 2015, 21:01 PM
Gracias por la respuesta daryo. Ya me ha funcionado, así lo tenía yo antes escrito, pero estoy buscando otra posible solución ¿Sabéis como hacerlo de otra manera?

una forma seria que si la variable usuario esta vacia entonces no muestras nada
Código (bash) [Seleccionar]
if [ -n "$usuario" ];then
echo el usuario existe
else
echo el usuario no existe
fi





otra  alternativa con el incomprensible awk
Código (bash) [Seleccionar]

#!/bin/bash
while read linea          
do
echo $linea | awk  -v r=$1 'BEGIN{FS=":";}{if($1==r){print "usuario: "$1"\nuid: "$3"\ngrupo: "$4"\nshell: "$7;}}'  
done < /etc/passwd


voy recorriendo cada linea  y se guarda en la varaible linea
dentro de awk que es en si otro lenguaje de programacion le digo que separe los elementos con el simbolo :
Código (bash) [Seleccionar]
BEGIN{FS=":";}

le digo que dentro de awk "r" va a ser la variable que nos envio el usuario

hago un if si el usuario $1 (el que esta en passwd ) es igual a  el usuario que estoy buscando "r" que que lo muestre
Código (bash) [Seleccionar]

if($1==r)
{
print "usuario: "$1"\n uid: "$3"\n grupo: "$4"\n shell: "$7
}


algo exagerado pero si quisiera que me saliera "no existe el usuario"

Código (bash) [Seleccionar]
#!/bin/bash
while read linea      
do
var=$(echo $linea | awk  -v r=$1 'BEGIN{FS=":";}{if($1==r){print "usuario: "$1"\nuid: "$3"\ngrupo: "$4"\nshell: "$7;}}' )
if [ -n "$var" ];then
   break
fi
done < /etc/passwd
if [ -n "$var" ];then
     echo $var
else
    echo "no existe el usuario"
fi
buenas

syncro_7

El primer código no me ha salido, he estado haciendo pruebas con usuarios reales y no me da resultado, sólo me da que el "usuario no existe". De mi código tengo que cambiar el

Código (bash) [Seleccionar]
if [ "$?" == "0" ]; then

Tengo que hacerlo de otra manera, pero lo del awk es muy complicado y no lo he dado en clase, mi profesor dice que hay otra manera que no es con el "$?" pero no lo logro, muchas gracias por estar ahí ayúndandome, si te se ocurre algo, seguiré mirando el post.  ¡Muchas gracias crack!

daryo

umm pues como te decia y si miras si la variable usuario esta vacia?
Código (bash) [Seleccionar]
#! /bin/bash
##Existencia del usuario
usuario=$(grep "$1" /etc/passwd | cut -d ":" -f 1)
if [ -n "$usuario" ];then
       
        uid=$(grep "$1" /etc/passwd | cut -d ":" -f 3);
        grupo=$(grep "$1" /etc/passwd | cut -d ":" -f 4);
        shell=$(grep "$1" /etc/passwd | cut -d ":" -f 7);
        ##Ahora hago los echo
        echo "El usuario es $usuario"
        echo "El uid es $uid"
        echo "El grupo es $grupo"
        echo "La shell en la que trabaja es $shell"
else
        echo "El usuario no existe en el sistema"
fi
exit;
buenas

syncro_7

Hola Dayro, te he dejado una parte del código que no lo entiendo bien por MP. Te lo dejo escrito por aquí. Esta parte del código no la entiendo, no entiendo que hace

Código (bash) [Seleccionar]
if [ -n "$usuario" ];then

Muchas gracias crack por tener paciencia y ayudar a un nobato como yo