您好,我正在尝试编写一个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有什么帮助吗?提前谢谢。
发布于 2012-03-02 11:54:40
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用awk替换第一个grep留给读者作为练习。
发布于 2012-03-02 09:23:59
如果您真的想使用who和awk
who | awk -v user="$1" '
$1 == user {
found = 1
print $5
}
END {
if (!found) {
print "user not logged in"
}
}'就我个人而言,我只会使用。
发布于 2012-03-02 09:23:09
这里有几点注意事项。
1)使用[而不是test -- test只是它的一个别名。([不是语法,它是程序的名称。)
2) //不是shell中的注释。:)类似地,""s“”中的内容,如"who|grep...“将不会被执行,它们将被shell当作文字处理。
3)首先执行who | grep ... | awk以提取特定列。
4)您可以通过执行以下操作来捕获3)的输出
VARIABLE=$(谁| ... )
5)然后,如果-z "$VARIABLE“或其他什么,你可以这样做。
6)或者,检查谁| fgrep -w ... | wc -l产生的值是否大于零。
可能还有十几种其他的方法来解决这个问题。
https://stackoverflow.com/questions/9526718
复制相似问题