Answers:
最基本的工具之一可能是id
。
#!/bin/bash
if id "$1" >/dev/null 2>&1; then
echo "user exists"
else
echo "user does not exist"
fi
哪个产生
$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist
if
使用否定结果检查器,那会怎样?
id -u $1 1>/dev/null 2>&1; echo $?
可用于管道
Getent
此命令旨在收集可由/ etc文件和各种远程服务(例如LDAP,AD,NIS /黄页,DNS等)支持的数据库的条目。
要确定一个密码命名服务之一是否知道用户名,只需运行:
getent passwd username
这也适用于组,主机和其他组件,具体取决于操作系统和实施。
getent
,也没有getent
在Mac OS X
finger
解析的输出finger -m <username>
。不幸的是,如果没有找到用户,则没有错误代码,但是如果没有找到用户,则将写入错误输出。到目前为止没有任何缺点。
finger -ms <username> 2>&1 1>/dev/null | wc -l
0
如果找到用户将打印(因为没有错误输出),否则将打印较大的数字。
chown
运行(作为任何用户,都令人惊讶):
T=$( mktemp -t foo.XXX ) ; chown <username> $T
如果失败root
,则帐号名称无效。
如果以非root
用户身份失败,则为“不允许的操作”或无效的用户(或等效用户)解析可能的本地化输出。LANG
预先设置以可靠地执行此操作。
我要说的是,您希望依靠/etc/passwd
并且类似(例如,/etc/shadow
对于基于Shadow的系统;在主题外的注释中,可能会使用某些类似的系统/etc/master.passwd
或其他类似的文件)。
在/etc/passwd
典型地视为对用户是否存在的绝对权威决定。如果您使用此页面上描述的任何其他方法,并且如果这些其他方法指向现有用户但/etc/passwd
没有指向现有用户,那么根据最常见的标准,我认为该用户在系统上不存在软件可能会依赖。
也就是说,我将以另一种方式添加一些可以使用的其他选项的组合。
ls -l /home | grep ^customUserName$<BR>
echo $?
显然,将“ customuserName”替换为要检查的用户名。如果这是系统使用的,则将/ home替换为/ users。如果没有为特定用户创建主目录,则可能无法在/ etc / passwd中找到所有用户;如果仅导入用户(即,将文本行导入/ etc / passwd),而主目录未创建,则可能会在/ etc / passwd中找不到所有用户。除非/直到一个人登录,否则获取成功。
id
或者系统getent
上不存在该“正确”的用户,尤其是在OP明确指出命名服务是被考虑。
if id -u "$1" >/dev/null 2>&1; then
...