¿Cómo puedo averiguar, en un script de shell, si existe un nombre de usuario dado en el sistema actual?
/etc/passwdy /etc/shadowestán incompletos Considere los servicios de directorio de OS X o Linux con la integración de Active Directory de Likewise.

if id -u "$1" >/dev/null 2>&1; then...ifcon el verificador de resultados negativos?id -u $1 1>/dev/null 2>&1; echo $?se puede usar para tuberíaGerente
Este comando está diseñado para reunir entradas para las bases de datos que pueden ser respaldadas por archivos / etc y varios servicios remotos como LDAP, AD, NIS / Páginas amarillas, DNS y similares.
Para averiguar si uno de los servicios de nombres de contraseña conoce un nombre de usuario, simplemente ejecute:
Esto funciona también con grupos, hosts y otros, dependiendo del sistema operativo y la implementación.
fuente
getent, no haygetenten Mac OS XfingerAnaliza la salida de
finger -m <username>. Sin código de error si no se encontró ningún usuario, desafortunadamente, pero si no se encuentra, se escribirá la salida de error. No hay inconvenientes hasta ahora.Se imprimirá
0si se encuentra el usuario (porque no hay salida de error), números más grandes de lo contrario.chownEjecutar (como cualquier usuario, sorprendentemente):
Si falla como
root, el nombre de la cuenta no es válido.Si falla como no
rootusuario, analice la salida posiblemente localizada para Operación no permitida o usuario no válido (o equivalentes). Establezca deLANGantemano para hacer esto de manera confiable.fuente
Yo diría que usted querría confiar
/etc/passwdy similares (por ejemplo,/etc/shadowpara sistemas basados en Shadow; en una nota al margen del tema, algunos sistemas similares podrían usar/etc/master.passwdu otros archivos similares).El
/etc/passwdse trata típicamente como la decisión de autoridad absoluta de si existe un usuario o no. Si usa cualquiera de los otros métodos descritos en esta página, y si esos otros métodos apuntan a un usuario existente pero/etc/passwdno lo hace, entonces diría que el usuario no existe correctamente en el sistema, por definición del estándar más común que el software probablemente dependería deDicho esto, agregaré otra forma de agregar a la mezcla de algunas otras opciones que podrían usarse.
ls -l /home | grep ^customUserName$<BR> echo $?Claramente, reemplace "customuserName" con el nombre del usuario que desea verificar. Reemplace / home con / users si eso es lo que usa su sistema. Esto podría no encontrar a todos los usuarios en / etc / passwd si no se creó un directorio de inicio para el usuario en particular, lo que podría ocurrir si simplemente importó usuarios (es decir, líneas de texto a / etc / passwd) y si los directorios de inicio no hacerse a menos que / hasta que una persona inicie sesión.
fuente
idogetentque no existe "correctamente" en el sistema, especialmente cuando el OP indica claramente que los servicios de nombres son para ser considerado.