¿Cómo puedo averiguar, en un script de shell, si existe un nombre de usuario dado en el sistema actual?
/etc/passwd
y /etc/shadow
está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
...if
con 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 haygetent
en Mac OS Xfinger
Analiza 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á
0
si se encuentra el usuario (porque no hay salida de error), números más grandes de lo contrario.chown
Ejecutar (como cualquier usuario, sorprendentemente):
Si falla como
root
, el nombre de la cuenta no es válido.Si falla como no
root
usuario, analice la salida posiblemente localizada para Operación no permitida o usuario no válido (o equivalentes). Establezca deLANG
antemano para hacer esto de manera confiable.fuente
Yo diría que usted querría confiar
/etc/passwd
y similares (por ejemplo,/etc/shadow
para sistemas basados en Shadow; en una nota al margen del tema, algunos sistemas similares podrían usar/etc/master.passwd
u otros archivos similares).El
/etc/passwd
se 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/passwd
no 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
id
ogetent
que no existe "correctamente" en el sistema, especialmente cuando el OP indica claramente que los servicios de nombres son para ser considerado.