如何在bash脚本中将该命令的结果存储为变量?

时间:2019-06-25 23:26:29

标签: linux bash

我正在构建一个简单的工具,它将使我知道网站“ siim.ml”是否可以解析。如果我在linux命令行中运行命令“ ping siim.ml | grep“名称或服务未知””,则它仅在站点无法解析时才返回文本。任何工作站点均不返回任何内容。

使用此命令,我想检查该命令的结果是否为空,以及是否要执行操作。

问题是无论我做什么变量都是空的!而且它仍然只是将结果打印到stdout而不是存储它。

我已经尝试过在`command`和$(command)之间切换,并删除了带有grep的管道,但是没有用

#!/bin/bash

result=$(ping siim.ml | grep "Name or service not known")

echo "Result var = " $result

if ["$result" = ""]
then
        #siim.ml resolved
        #/usr/local/bin/textMe/testSite.sh "siim.ml has resolved"
        echo "It would send the text"
fi

当我运行脚本时,它将显示以下内容:

ping: siim.ml: Name or service not known
Result var =
It would send the text

2 个答案:

答案 0 :(得分:1)

几乎可以肯定,因为该错误将是标准的 error 而不是标准的 output (后者将由$()捕获)。

您可以将标准错误合并到输出流中,如下所示:

result=$(ping siim.ml 2>&1 | grep "Name or service not known")

此外,您需要用空格将[]字符与表达式分开:

if [ "$result" = "" ]

答案 1 :(得分:1)

或更简洁些,只需检查ping是否成功,例如

if ping -q -c 1 siim.ml &>/dev/null
then
    echo "It would send the text"
    ## set result or whatever else you need on success here
fi

由于重定向到/dev/null,因此不会产生任何输出,并且仅在ping的成功siim.ml成功的情况下成功。