0

我正在学习编写脚本,但我似乎无法找到一种方法来让脚本接受用户名作为命令行参数,然后只为我提供该用户名的帐户信息的输出。谁能帮我?

4

3 回答 3

3

为什么你不应该这样做

有几个命令行程序可以从 /etc/passwd、/etc/groups 和其他帐户信息(例如读取 .plan、.project 和 .pgpkey)中获取信息

通常,您不希望直接使用 /etc/passwd,因为可能有其他数据库(如 NIS+ 或 LDAP)在系统上维护您的帐户信息。

获取有关帐户信息的软件:

finger— 几乎可以保证无处不在,出现在 BSD 3.0 中,finger 是一个网络感知程序,由 fingerd(8) 守护进程提供服务,用于远程指法。

`pinky — GNU coreutils 的一个轻量级手指程序(我认为没有网络支持)

id– 适用于大多数 System V 兼容环境(如果我没记错的话?)

who- 显示登录信息,它还将显示用户是否通过通话/写入协议接受消息,以及他们是否会接受talk write您的控制终端上的请求(有关详细信息,请参阅消息(1))

好吧,也许你想做这件事是为了好玩

这是一种仅限本地使用的快速而肮脏的方法:

#!/bin/bash

user="$1"


awk -F: '/^'$user'/ { print "Login: " $1 " UID: " $3 " GID: " $4 \
           " GECOS: " $5 " Home Directory: " $6 " Shel: " $7 }' /etc/passwd

您可以类似地从用户的主目录访问 .plan 等。

阅读 passwd(5) 手册页,man 5 passwd以获取密码结构的详细信息:

于 2013-07-06T05:24:33.067 回答
1

在 Linux 上,您可以用于从配置的后端(例如本地文件、NIS、LDAP,...)getent passwd中透明地检索用户信息。例子:/etc/nsswitch.confpasswd

$ getent passwd jsmith
jsmith:x:1234:100:John Smith,,,:/home/jsmith:/bin/bash

getent但是,在其他一些 Unix 风格上不可用,比如 Mac OS X。

于 2013-07-06T08:35:55.277 回答
1

由于您已标记此 Linux、Bash 和 Unix,因此您要查找的信息很可能在 /etc/passwd 中。

尝试man 5 passwd获取有关字段的信息。这是操作系统存储的参考用户的信息。需要进一步探索更深入的信息。

一个简单的例子如下:

#!/bin/sh

grep -E "^$1:" /etc/passwd | sed 's/\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\)/Username: \1\nUID: \3\nGID: \4\nComments: \5\nHome: \6\nShell: \7/'

它为我提供了这个示例输出:

% /tmp/username.sh taylor
Username: taylor
UID: 1001
GID: 100
Comments: 
Home: /home/taylor
Shell: /bin/zsh
于 2013-07-06T02:39:31.607 回答