使用ksh检索活动用户信息脚本?

时间:2014-11-28 22:13:08

标签: shell ksh aix

我正在使用在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

我很感激帮助。 感谢

1 个答案:

答案 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中测试)。