gpt4 book ai didi

bash - 打印使用手指登录的用户的唯一名称

转载 作者:行者123 更新时间:2023-11-29 09:40:35 24 4
gpt4 key购买 nike

我正在尝试编写一个 shell 脚本来打印登录到计算机的用户的全名。 finger 命令给了我一个用户列表,但是有很多重复项。我怎样才能遍历并只打印出唯一的?

编辑:

这是手指给我的格式:

xxxx      XX of group XXX  pts/59   1:00  Feb 13 16:38 
xxxx XX of group XXX pts/71 1:11 Feb 13 16:27
xxxx XX of group XXX pts/105 1d Feb 12 15:22
xxxx YY of group YYY pts/102 2:19 Feb 13 14:13
xxxx ZZ of group ZZZ pts/42 2d Feb 7 12:11

我正在尝试提取全名(即第 2 列中“of group”之前的任何内容),因此我将 awk 与 finger 一起使用。

最佳答案

你想要的在 shell 脚本中实际上相当困难,例如,这是我的 finger(1) 的完整输出:

Login             Name             TTY      Idle  Login  Time   Office  Phone
martin Martin Tournoij *v0 1d Wed 14:11
martin Martin Tournoij pts/2 22 Wed 15:37
martin Martin Tournoij pts/5 41 Thu 23:16
martin Martin Tournoij pts/7 31 Thu 23:24
martin Martin Tournoij pts/8 Thu 23:29

您需要全名,但这可能包含 1 个空格(按照我的示例),或者可能只是“Teller”(没有空格),或者可能是“Captain James T” . Kirk'(3 个空格)。所以你不能只使用空格作为分隔符。您可以使用“TTY”在 header 中的字符位置作为指示符,但这不是很优雅的恕我直言(尤其是使用 shell 脚本时)。

因此我的解决方案略有不同,我们只从 finger(1) 获取用户名,然后从 /etc/passwd

获取全名
#!/bin/sh

prev=""
for u in $(finger | tail +2 | cut -w -f1 | sort); do
[ "$u" = "$prev" ] && continue
echo "$u $(grep "^$u" /etc/passwd | cut -d: -f5)"
prev="$u"
done

这给了我用户名和登录名:

martin Martin Tournoij

显然,您也可以只打印真实姓名(不带 $u)。

关于bash - 打印使用手指登录的用户的唯一名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21766842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com