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`.