命令输出和字符串比较

时间:2015-11-25 16:19:46

标签: bash shell

经过多年的观看'我终于需要你的帮助! 我无法找到解决这个难题的方法。

我正在尝试创建一个脚本来检查服务器是否在我的ubuntu平台上运行,如果有echo" smthing"否则回声" other_thing"。

我在启动时被阻止,因为我需要检查我的localhost:端口是否有连接。

我正在使用" nc -zv localhost 80"用于测试目的。

我的想法:如果端口80是回声"是"如果不回应"否。"

我总是收到错误或错过结果,因为代码似乎不太好。

#! /bin/sh

cmd=`nc -zv localhost 80`
answer="Connection to localhost 80 port [tcp/http] succeeded!"


if [ "$cmd" = "$answer" ]; then
    echo "Yes"
else
    echo "No"
fi

exit 0

谢谢!

2 个答案:

答案 0 :(得分:3)

如果您运行代码,则会看到消息打印到屏幕上,而您可能希望将其捕获。这是因为它被写入stderr。

您可以使用cmd=`nc -zv localhost 80 2>&1`捕获此类输出,但更好更强大的方法是使用所有Unix工具都有退出代码的事实,该退出代码告诉您命令是成功还是失败,因此可以使用直接在if语句中:

if nc -z localhost 80
then
  echo "Port open"
else
  echo "Port closed"
fi

答案 1 :(得分:0)

nc

的输出中删除尾随回车符
cmd=$(nc -zv localhost 80)
cmd=${cmd%$'\r'}

或在预期输出中包含回车符:

answer="Connection to localhost 80 port [tcp/http] succeeded!"$'\r'