检查linux命令是否输出空字符串

时间:2017-06-21 10:20:49

标签: java linux bash shell

我想检查端口是否正在使用。我使用了命令:netstat -an | grep <port_no> | grep -i listen。当我通过运行if(message_port_check.equals(null))来比较其输出时,始终返回null 。我怎么知道端口是否打开?

这就是我尝试过的,

String port_no = textField_3.getText().toString();
String[] command_port = {
"/bin/sh",
"-c",
"netstat -an | grep " + port_no + " | grep -i listen"
};


try {

    ProcessBuilder builder = new ProcessBuilder(command_port);
    builder.redirectErrorStream(true);
    Process p = builder.start();

    BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
    StringBuffer buffer = new StringBuffer();
    String line = "";
    while (true) 
    {

        buffer.append(line).append("\n");
        line = r.readLine();
        if (line == null) { break; }
    }
    message_port= buffer.toString();
    p.waitFor();
    r.close();

} 

catch (IOException e1) 
{
    e1.printStackTrace();
} 

catch (InterruptedException e1) 
{
    e1.printStackTrace();
}

if(message_port_check.equals(null))
    rdbtn_port_free.setSelected(true);

else
    rdbtn_port_notfree.setSelected(true);

2 个答案:

答案 0 :(得分:1)

您可以使用nc,如this reply所示。然后你只需要检查返回值。

当然在Java中,独立于平台的精神解决方案是尝试使用标准库连接/绑定到端口,而不是依赖外部Linux二进制文件。显示了一些变体here

答案 1 :(得分:1)

我使用-z测试:

$ output=$(netstat -an | grep your_port | grep -i listen)
$ if [ -z "$output" ] ; then echo empty ; fi
empty