什么是接受用户名作为命令行参数的脚本,并且只显示该用户的帐户信息?

时间:2013-07-06 02:28:38

标签: linux bash unix

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

3 个答案:

答案 0 :(得分: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请求,也会显示有关详细信息,请参阅mesg(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以获取密码结构的详细信息:

答案 1 :(得分: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

答案 2 :(得分:1)

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

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

getent在某些其他Unix版本上不可用,例如Mac OS X.