我需要找到一个用户,如果该用户不在系统中,该命令应以非零返回代码退出。我们可以在 中执行此操作bash
,但我需要将其作为行命令,而不是bash
脚本。那可能吗?
答案1
测试系统上是否存在用户的一个好方法是使用getent
.该getent
实用程序可以从各种“数据库”返回各种信息,例如,passwd
“数据库”,group
“数据库”,并且在某些系统上,您甚至可以要求getent
列出可用的登录 shell。
要测试用户 是否testuser
在系统中,请询问getent
该passwd
用户的条目:
getent passwd testuser
如果成功,您将获得一个passwd
条目作为输出,并从 获得零退出状态getent
。如果失败,您将不会得到任何输出和非零退出状态。我相信这就是您所要求的命令。
我们可以丢弃实用程序生成的任何输出并在语句中使用它if
,如下所示:
theuser=testuser
if getent passwd "$theuser" >/dev/null
then
printf 'The user "%s" exists\n' "$theuser"
else
printf 'The user "%s" does not exist\n' "$theuser"
fi
当然,您可以/etc/passwd
直接使用某些grep
命令解析文件,但这很容易出错(与getent
上面所示的使用相比),并且在使用某种形式的目录服务的系统上也无法正常工作。