我正在构建一个简单的工具,它将使我知道网站“ 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
答案 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
成功的情况下成功。