首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谁在bourne-shell中返回值

谁在bourne-shell中返回值
EN

Stack Overflow用户
提问于 2012-03-02 09:18:08
回答 3查看 150关注 0票数 1

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

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

代码语言:javascript
复制
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

有什么帮助吗?提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-02 11:54:40

1)你的情况完全搞砸了。

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

3)您正在混合grep和awk。

4)你没有引用你的echo参数。

代码语言:javascript
复制
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留给读者作为练习。

票数 2
EN

Stack Overflow用户

发布于 2012-03-02 09:23:59

如果您真的想使用whoawk

代码语言:javascript
复制
who | awk -v user="$1" '
$1 == user {
    found = 1
    print $5
}

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

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

票数 4
EN

Stack Overflow用户

发布于 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产生的值是否大于零。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9526718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档