Я бы подошла к этому тесту:
:
и концом поля $
. Вы можете изменить логику, чтобы включить либо входящие, либо исходящие, если это то, что вам нужно.
Если вы используете флаг -n
netstat, вам не нужно искать "ssh"; чтобы быть более детализированным и запросить, чтобы только порты были числовыми (в Linux )при попытке разрешить IP-адреса, используйте --numeric-ports
. Я также сбросил флаг -a
netstat, чтобы отфильтровать строки «LISTEN» (, поскольку они не подключены к другой конечной точке ). Поскольку я печатаю только установленные соединения, я также удалил поле 6 («УСТАНОВЛЕНО» )из вывода; это достаточно легко добавить обратно, статически или динамически.
netstat -n | awk '$6 == "ESTABLISHED" && ($3 ~ /:22$/ || $4 ~ /:22$/) { print $4 " -> " $5}'
или
netstat --numeric-ports | awk '$6 == "ESTABLISHED" && ($3 ~ /:22$/ || $4 ~ /:22$/) { print $4 " -> " $5}'
Часть (...)
вашей команды — это ваша проблема. Скобки создают отдельную подоболочку. Подоболочка унаследует среду от своей родительской оболочки, но переменные, установленные внутри нее, не сохранят свои новые значения после выхода из подоболочки. Это также относится к любым другим изменениям среды внутри подоболочки, включая изменение каталогов, настройку параметров оболочки и т. д.
Поэтому удалите подоболочку:
if [ 1 = 1 ]; then a=2; fi
echo "$a"
Это доказывает, что установка переменной в подчиненной -оболочке не имеет долговременного эффекта
(if [ 1 == 1 ]; then a=2; fi);
echo $a
производит
1
то же, что и
(a=2)
echo $a
производит
1
Решение: удалите скобки.
if [ 1 == 1 ]; then a=2; fi;
echo $a
производит
2
или если вам нужна дополнительная оболочка -
(
if [ 1 == 1 ]; then a=2; fi;
echo $a
)
производит
2
Это было сделано описанным ниже способом, и все работало нормально
_example ~]# if [[ 1 == 1 ]]; then echo "praveen"; a=2; echo $a; fi| sed '1i================================\n output'
================================
output
praveen
2