嗨我正在尝试编写一个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
任何帮助?提前谢谢。
答案 0 :(得分:4)
如果您真的想使用who
和awk
:
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
留给读者练习。