查看用户名是否存在

Dan*_*eck 75 unix bash shell

如何在 shell 脚本中找出当前系统上是否存在给定的用户名?


/etc/passwd并且/etc/shadow是不完整的。考虑 OS X 的目录服务,或具有 Likely Active Directory 集成的 Linux。

bar*_*baz 115

用于此目的的最基本工具之一可能是id.

#!/bin/bash
if id "$1" >/dev/null 2>&1; then
        echo "user exists"
else
        echo "user does not exist"
fi
Run Code Online (Sandbox Code Playgroud)

其中产生

$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist
Run Code Online (Sandbox Code Playgroud)

  • 这里不需要反引号——只需使用`if id -u "$1" >/dev/null 2>&1; 然后` ... (2认同)

jll*_*gre 24

对象

此命令旨在收集可由 /etc 文件和各种远程服务(如 LDAP、AD、NIS/黄页、DNS 等)支持的数据库条目。

要确定密码命名服务之一是否知道用户名,只需运行:

getent passwd username
Run Code Online (Sandbox Code Playgroud)

这也适用于组、主机和其他人,具体取决于操作系统和实现。


Dan*_*eck 7

finger

解析输出finger -m <username>。不幸的是,如果没有找到用户,则没有错误代码,但如果没有找到,则会写入错误输出。目前没有任何缺点。

finger -ms <username> 2>&1 1>/dev/null | wc -l
Run Code Online (Sandbox Code Playgroud)

0如果找到用户,将打印(因为没有错误输出),否则打印更大的数字。

chown

运行(作为任何用户,令人惊讶的是):

T=$( mktemp -t foo.XXX ) ; chown <username> $T
Run Code Online (Sandbox Code Playgroud)

如果失败为root,则帐户名无效。

如果它作为非root用户失败,则解析操作不允许无效用户(或等效用户)的可能本地化输出。LANG预先设置以可靠地执行此操作。