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

Linux 如何将此命令的结果作为变量存储在bash脚本中?,linux,bash,Linux,Bash,我正在构建一个简单的工具,它可以让我知道一个站点“siim.ml”是否可以解析。如果我在linux命令行中运行命令“ping siim.ml | grep”Name或service not known”,那么它只会在站点未解析时返回文本。任何工作地点都不会返回任何内容 使用该命令,我想检查该命令的结果是否为空,如果为空,我想执行一个操作 问题是无论我做什么,变量都是空的!它仍然只是将结果打印到标准输出,而不是存储 我已经尝试过在'command'和$(command)之间切换,并删除了带有gre

我正在构建一个简单的工具,它可以让我知道一个站点“siim.ml”是否可以解析。如果我在linux命令行中运行命令“ping siim.ml | grep”Name或service not known”,那么它只会在站点未解析时返回文本。任何工作地点都不会返回任何内容

使用该命令,我想检查该命令的结果是否为空,如果为空,我想执行一个操作

问题是无论我做什么,变量都是空的!它仍然只是将结果打印到标准输出,而不是存储

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

#/bin/bash
结果=$(ping siim.ml | grep“名称或服务未知”)
echo“Result var=“$Result
如果[“$result”=”]
然后
#siim.ml已解析
#/usr/local/bin/textMe/testSite.sh“siim.ml已解决”
echo“它将发送文本”
fi
当我运行脚本时,它会打印以下内容:

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

这几乎可以肯定,因为该错误将是标准错误,而不是标准输出(后者将由
$()
捕获)

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

result=$(ping siim.ml 2>&1 | grep "Name or service not known")
此外,还需要空格将
[
]
字符与表达式分隔开来:

if [ "$result" = "" ]

这几乎可以肯定,因为该错误将是标准错误,而不是标准输出(后者将由
$()
捕获)

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

result=$(ping siim.ml 2>&1 | grep "Name or service not known")
此外,还需要空格将
[
]
字符与表达式分隔开来:

if [ "$result" = "" ]

或者更简洁一点,只需检查
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
,这不会产生任何输出,并且只有当
siim.ml
ping成功时才会成功。

或者更简洁一点,只需检查
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
,因此这不会产生任何输出,并且仅当
siim.ml
ping成功时才会成功。

如果[“$result”=”]
不正确。当
结果
为空时,如果[=]
成功,则该结果变为
,因为
=
不是空字符串<代码>如果[“$result”=”]
不正确。当
结果
为空时,如果[=]
成功,则该结果变为
,因为
=
不是空字符串!当我进行此更改时,结果变为
result var=ping:siim.ml:名称或服务未知。/checkSiim.sh:第8行:[ping:siim.ml:Name或service not known:command not found
因此它分配了变量,但随后断开了作为if语句的第8行?当我进行此更改时,结果变为
result var=ping:siim.ml:Name或service not known。/checkSiim.sh:line 8:[ping:siim.ml:Name或service not known:command not found
因此它分配了var,但却打断了if语句的第8行?这对我来说很有效,谢谢!我想我得到的ping结果与输出混淆了。是的,确实如此。请记住,您总是可以在
if…then中直接使用命令的返回作为测试…fi
而不是试图保存输出。祝您脚本编写顺利。这对我来说很有效,谢谢!我想我得到的是ping结果与输出混淆。是的,确实发生了。请记住,您可以在
if…then…fi
中直接使用命令返回作为测试,而不是试图保存输出。祝你的脚本编写工作好运。