How do I determine if a port is in use, e.g. via netstat?

netstat, port, shell, unix

Solution

Assuming you are using netstat from net-tools, this is a working example:

function is_port_free { 

    netstat -ntpl | grep [0-9]:${1:-8080} -q ; 

    if [ $? -eq 1 ]
    then 
        echo yes 
    else 
        echo no
    fi
}

- ${1:-8080} means use first argument as port and 8080 if no first argument

- grep -q [0-9]:port means match a number followed by a colon followed by port

- $? is the exit value of the previous command. Zero means all went well. Exit values above 0 indicate an error condition. In the context of grep, exit code 1 means no match. The -q means don't do anything but return the exit value.

- netstat -ltnp means list numeric ports and IPs for all programs that are listening on a tcp port.

- a | b means process standard output of a with b

eg.

$ is_port_free 8080
yes

$ is_port_free 22
no

Problem

I am trying to check port availability and get a return value using shell script. Example: if port 8080 is free then return true, else return false. Can anyone help? I tried with `netstat`.

Original source