Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: syncro_7 en 10 Octubre 2015, 20:29 pm



Título: [AYUDA] Shell-Script
Publicado por: syncro_7 en 10 Octubre 2015, 20:29 pm
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
  1. #! /bin/bash
  2. ##Existencia del usuario
  3.  
  4. if [ $1 -eq /etc/passwd ];then
  5.        usuario=$(grep "$1" /etc/passwd | cut -d ":" -f 1)
  6.        uid=$(grep "$1" /etc/passwd | cut -d ":" -f 3);
  7.        grupo=$(grep "$1" /etc/passwd | cut -d ":" -f 4);
  8.        shell=$(grep "$1" /etc/passwd | cut -d ":" -f 7);
  9.        ##Ahora hago los echo
  10.        echo "El usuario es $usuario"
  11.        echo "El uid es $uid"
  12.        echo "El grupo es $grupo"
  13.        echo "La shell en la que trabaja es $shell"
  14. else
  15.        echo "El usuario no existe en el sistema"
  16. fi
  17. exit;
  18.  
  19.  


Título: Re: [AYUDA] Shell-Script
Publicado por: daryo en 10 Octubre 2015, 20:42 pm
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
  1. grep "$1" /etc/passwd
  2. if [ "$?" == "0" ]; then
  3. echo "aca va el proceso"
  4. else
  5. echo "no existe el usuario"
  6. fi


Título: Re: [AYUDA] Shell-Script
Publicado por: 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?


Título: Re: [AYUDA] Shell-Script
Publicado por: daryo en 10 Octubre 2015, 21:34 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
  1. if [ -n "$usuario" ];then
  2. echo el usuario existe
  3. else
  4. echo el usuario no existe
  5. fi



otra  alternativa con el incomprensible awk
Código
  1. #!/bin/bash
  2. while read linea          
  3. do
  4. echo $linea | awk  -v r=$1 'BEGIN{FS=":";}{if($1==r){print "usuario: "$1"\nuid: "$3"\ngrupo: "$4"\nshell: "$7;}}'  
  5. 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
  1. 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
  1. if($1==r)
  2. {
  3. print "usuario: "$1"\n uid: "$3"\n grupo: "$4"\n shell: "$7
  4. }

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

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


Título: Re: [AYUDA] Shell-Script
Publicado por: syncro_7 en 10 Octubre 2015, 22:20 pm
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
  1. 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!


Título: Re: [AYUDA] Shell-Script
Publicado por: daryo en 10 Octubre 2015, 22:41 pm
umm pues como te decia y si miras si la variable usuario esta vacia?
Código
  1. #! /bin/bash
  2. ##Existencia del usuario
  3. usuario=$(grep "$1" /etc/passwd | cut -d ":" -f 1)
  4. if [ -n "$usuario" ];then
  5.  
  6.        uid=$(grep "$1" /etc/passwd | cut -d ":" -f 3);
  7.        grupo=$(grep "$1" /etc/passwd | cut -d ":" -f 4);
  8.        shell=$(grep "$1" /etc/passwd | cut -d ":" -f 7);
  9.        ##Ahora hago los echo
  10.        echo "El usuario es $usuario"
  11.        echo "El uid es $uid"
  12.        echo "El grupo es $grupo"
  13.        echo "La shell en la que trabaja es $shell"
  14. else
  15.        echo "El usuario no existe en el sistema"
  16. fi
  17. exit;
  18.  


Título: Re: [AYUDA] Shell-Script
Publicado por: syncro_7 en 12 Octubre 2015, 14:24 pm
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
  1. if [ -n "$usuario" ];then

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