我正在学习编写脚本,但我似乎无法找到一种方法来让脚本接受用户名作为命令行参数,然后只为我提供该用户名的帐户信息的输出。谁能帮我?
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
以获取密码结构的详细信息:
在 Linux 上,您可以用于从配置的后端(例如本地文件、NIS、LDAP,...)getent passwd
中透明地检索用户信息。例子:/etc/nsswitch.conf
passwd
$ getent passwd jsmith
jsmith:x:1234:100:John Smith,,,:/home/jsmith:/bin/bash
getent
但是,在其他一些 Unix 风格上不可用,比如 Mac OS X。
由于您已标记此 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