我正在使用在AIX上运行的应用程序,并且不提供有关哪些用户当前正在使用该系统的任何信息。相反,它只有一个实用程序userInfo,它列出了db中的所有用户ID和用户名:
>userInfo <path to app> -list
696969 Doe, John
123456 Doe, Jane
121212 Jones, Mike
232323 Sanders, Chris
345678 Smith, Mary
等等...
我检索当前在系统中的用户的方法是首先搜索活动用户会话这将返回一个字符串,其中包含以下格式的用户ID(编号)。
>ps –ef | grep <app name> | grep user
<process name and path info…> -user 696969 <more process and path info>
<process name and path info…> -user 121212 <more process and path info>
然后使用grep
运行userInfo实用程序>userInfo <path to app> -list | grep 696969
696969 Doe, John
这个问题是它全部是手动的,必须为ps -ef找到的每个单独的用户ID重复。当系统中有许多用户时,这通常会被要求在很短的时间内发送活动用户列表,这需要花费很多时间。 我想创建一个自动化该过程的脚本。最好是在KSH中,但bash也可以。我可以运行脚本,它为我提供了当前用户ID和名称的列表:
>script.ksh
696969 Doe, John
232323 Sanders, Chris
345678 Smith, Mary
我很感激帮助。 感谢
答案 0 :(得分:1)
将第一个输出传递给sed 's/.*-user \([^ \t]*\).*/\1/'
,然后使用for循环为每个用户ID grep。祝你好运!
sed命令将过滤用户ID。
更具体一点:
for userid in $(ps –ef | grep <app name> | grep user | sed 's/.*-user \([^ \t]*\).*/\1/')
do
userInfo <path to app> -list |grep $userid
done
更好的版本:
for userid in $(ps –ef | grep -E "$1.*user|user.*$1" | sed 's/.*-user \([^ \t]*\).*/\1/')
do
userInfo $(which $1) -list |grep $userid
done
其中$ 1是作为脚本参数传递的应用程序的名称,请注意这是未经测试的(或者在bash中测试)。