谁在bourne-shell中返回值

时间:2012-03-02 01:18:08

标签: scripting sh

嗨我正在尝试编写一个bourne-shell脚本,该脚本将名称作为参数,并检查用户是否已登录,如果没有则输出消息。

这是我到目前为止所得到的,但我的情况是错误的。

if test "who|grep $1" == "$1" //the problem is that it takes the hole 1st column
then 
  who|grep $1|awk '{print $5}'
else
  echo user not logged in
fi

任何帮助?提前谢谢。

3 个答案:

答案 0 :(得分:4)

如果您真的想使用whoawk

who | awk -v user="$1" '
$1 == user {
    found = 1
    print $5
}

END {
    if (!found) {
        print "user not logged in"
    }
}'

就个人而言,我只会使用finger

答案 1 :(得分:3)

这里有几点说明。

1)使用[而不是测试 - 测试只是它的别名。 ([不是语法,它是程序的名称。)

2)//不是shell中的注释。 :)同样,“s”中的内容,如“who | grep ...”将不会被执行,它们将被shell视为文字。

3)从做谁|开始grep ... | awk提取特定列。

4)您可以通过执行类似

的操作来捕获3)的输出

VARIABLE = $(谁| ...)

5)然后,你可以做[ - z“$ VARIABLE”]或其他什么。

6)或者,检查是谁[ fgrep -w ... | wc -l收益率大于零。

可能有十几种其他方法可以解决这个问题。

答案 2 :(得分:2)

1)你的病情完全被污染了。

2)你的正则表达式是不准确的。

3)你正在混合grep和awk。

4)你没有引用你的echo论点。

if who | grep -q "^$1\s"
then 
  who | awk -v user="$1" '$1 == user { print $5 }'
else
  echo "user not logged in"
fi

将第一个grep替换为awk留给读者练习。