检查用户输出中是否显示用户名

时间:2016-03-17 04:27:23

标签: linux bash

该任务要求编写一个bash脚本,该脚本将搜索“who”命令以查找将通过命令行参数提供的给定用户ID

此脚本将显示是否已登录此用户ID

到目前为止,我知道要获取用户ID,可以这样做:

who | cut -d' ' -f1 | grep "userIdToSearchFor"

这个grep将显示用户ID(如果存在),如果不存在则显示任何内容,因此它似乎是一个好方法

我相信$1变量将保存第一个命令行参数

我如何在bash脚本文件中实现它?

编辑:

当前的工作脚本如下所示

#!/bin/bash
userid=$(who | cut -d' ' -f1 | grep "$1") 

if [ "$1" == "$userid" ]
then
   echo    "online" 
else    
   echo    "offline" 
fi

2 个答案:

答案 0 :(得分:3)

这应该适合你:

STRING=$(who | cut -d' ' -f1 | grep "$1")

if [ "$1" = "$STRING" ]
then
   echo    "online" 
else    
   echo    "offline"
fi

一些意见和建议:

  • 分配变量时,=两侧都没有空格(这是您的错误消息来源)。
  • 要将命令结果分配给变量,必须使用$( )语法。有关详情,请参阅command substitution
  • 引用测试中的变量以防止分词。
  • 你应该循环测试,可能有多个相同的用户名。
  • 避免使用变量名称中的上限,以免与按惯例大写的environment variables混淆。
  • 避免使用var的类型作为其名称,在您的情况下username将是更好的选择。

答案 1 :(得分:2)

你正在努力做到这一点。

$ cat user.sh
#!/bin/bash
# user.sh username - shows whether username is logged on or not

if who | grep --silent "^$1 " ; then
   echo online
else
   echo offline
fi
$ ./user.sh msw
online