一个衬垫看看 grep 是否返回了一些东西?

一个衬垫看看 grep 是否返回了一些东西?

我正在尝试检查机器是否是 ThinkPad 或不使用类似这样的东西:

sudo dmidecode | grep ThinkPad

我希望最终结果返回 true 或 false(或 1/0)。

我想解决方案可能是这样的:

sudo dmidecode | grep -c ThinkPad | test xargs -gt 0

但我不确定xargs这里如何正确使用。

答案1

只需在 后面添加退出状态检查grep,默认情况下它将始终从管道的最后一个命令获取退出状态:

sudo dmidecode | grep -q ThinkPad; echo $?

用于-q抑制任何输出,grep因为我们只对退出状态感兴趣。


如果您愿意,可以使用命令分组,但这在这里有些多余:

sudo dmidecode | { grep -q ThinkPad; echo $? ;}

答案2

如果您打算使用带有if检查功能的 shell 脚本,只需按照 heemayl 的建议使用即可-q

if sudo dmidecode | grep -q Thinkpad
then
    echo "I'm a Thinkpad"
fi

由于该if块检查命令的退出状态,因此我们可以grep直接依赖 的退出状态,而不是打印$?并将其与其他内容进行比较。

答案3

灵感来自希梅尔的回答

sudo dmidecode | grep -q ThinkPad && echo true || echo false

如果 grep 找到 ThinkPad,则返回 true,否则返回 false。

答案4

sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt

您需要重新排列xargsandtest命令及其操作数才能获得您想要的结果。如果有非零 (>0) ThinkPad 组成线路,则这将返回 true 状态。

或者,如果您想保留测试命令的操作数顺序,您可以这样做

sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0

然后,在两个命令中,检查$?变量的值来确定 grep 成功/失败的命运,如下所示:

if sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0; then
   echo "success hooray!"
else 
   echo nothing
fi

相关内容