Команда, которую я использую, неправильно должен проверить, что порт устанавливается или нет?
count=$(netstat -an | awk '$4 ~ /:'"$PORT"'$/ && $6 == "ESTABLISHED" {print $0}'| wc -l)
И взятие $count > 0
как установлено?
Я не уверен, что вы подразумеваете под «считать $ count> 0 как установленное?», Но это похоже на действительное количество установленных соединений с данным портом. Возможно, вы захотите ограничиться определенным интерфейсом или протоколом (поэтому две разные службы, прослушивающие один и тот же порт, но на разных интерфейсах, не перепутаются).
Кроме того, вы также можете немного упростить команду:
count=$(netstat -an | awk -v port=":$PORT\$" '$4 ~ port && $6 == "ESTABLISHED" {count++} END {print count}')
Вместо этого вы также можете использовать lsof
. lsof -i :$PORT
перечислит открытые соединения на этом порту, и вы можете использовать -n
(аналогично -n
в netstat
) и опцию -F T
(для перечисления PID, номера дескриптора файла и только состояний TCP) чтобы было легче разобрать:
lsof -ni ":$PORT" -FT | grep -c TST=ESTABLISHED
Ваш подход, кажется, работает, но он не очень элегантен. Я бы предпочел сделать это следующим образом:
if [[ "$(LANG=C netstat -nt | awk -F" +|:" '/ESTABLISHED/{print$5}')" =~ "$PORT" ]]; then
echo $PORT established
else
echo $PORT not established
fi
Подстановка команд просто печатает список установленных хостов независимо от локали пользователя, условное выражение проверяет, находится ли $PORT
в этом списке, и выполняет then
список, если так, и список else
, если нет.