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
#! /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;
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
grep "$1" /etc/passwd
if [ "$?" == "0" ]; then
echo "aca va el proceso"
else
echo "no existe el usuario"
fi
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?
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
if [ -n "$usuario" ];then
echo el usuario existe
else
echo el usuario no existe
fi
otra alternativa con el incomprensible awk
#!/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 :
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
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"
#!/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
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
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!
umm pues como te decia y si miras si la variable usuario esta vacia?
#! /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;
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
if [ -n "$usuario" ];then
Muchas gracias crack por tener paciencia y ayudar a un nobato como yo