用于识别用户的Bash脚本

时间:2014-05-08 02:54:48

标签: bash awk

我想我可能以错误的方式解决了这个问题,我真的可以在这里使用一只手。 我正在尝试使用awk将报告打印到屏幕上。我想列出登录的用户以及每个用户旁边的全名。我能想出来的唯一方法是下面,但它只显示我自己的信息。我能以某种方式将其添加到循环中以实现此目的,还是我完全错了?

这就是我所拥有的:

echo "User name"  "|"  "Full name"
echo "--------------------------"
echo -n "$USER " ; awk -v user="$USER" -F":" 'user==$1{print$5}' /etc/passwd

2 个答案:

答案 0 :(得分:2)

$USER变量只包含您的用户名。

您可以通过管道who命令获取已登录用户的列表。

echo "User name"  "|"  "Full name"
echo "--------------------------"
who | while read username rest; do
    echo -n "$username " ; awk -v user="$username" -F":" 'user==$1{print$5}' /etc/passwd
done

答案 1 :(得分:0)

每当你发现自己在shell中编写循环来处理文本时,你的解决方案都是错误的。

who | awk '
BEGIN { print "User name|Full name\n--------------------------" }
NR==FNR { name[$1] = $5; next }
{ print $1, name[$1] }
' FS=":" /etc/passwd FS=" " -

Shell只是一个可以调用工具的环境,它有一种语言可以对这些调用进行排序。处理文本的shell工具是awk。