Условная установка переменной в командной строке

Я бы подошла к этому тесту:

  • УСТАНОВЛЕННОЕ соединение и
  • включает либо входящий(порт 3 поля 22 )или исходящий порт(порт 4 поля 22 )соединения --здесь закреплены между :и концом поля $.

Вы можете изменить логику, чтобы включить либо входящие, либо исходящие, если это то, что вам нужно.

Если вы используете флаг -nnetstat, вам не нужно искать "ssh"; чтобы быть более детализированным и запросить, чтобы только порты были числовыми (в Linux )при попытке разрешить IP-адреса, используйте --numeric-ports. Я также сбросил флаг -anetstat, чтобы отфильтровать строки «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}'
3
20.11.2018, 18:19
3 ответа

Часть (...)вашей команды — это ваша проблема. Скобки создают отдельную подоболочку. Подоболочка унаследует среду от своей родительской оболочки, но переменные, установленные внутри нее, не сохранят свои новые значения после выхода из подоболочки. Это также относится к любым другим изменениям среды внутри подоболочки, включая изменение каталогов, настройку параметров оболочки и т. д.

Поэтому удалите подоболочку:

if [ 1 = 1 ]; then a=2; fi
echo "$a"
10
20.08.2021, 11:08

Это доказывает, что установка переменной в подчиненной -оболочке не имеет долговременного эффекта

(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
5
20.08.2021, 11:08

Это было сделано описанным ниже способом, и все работало нормально

_example ~]# if [[ 1 == 1 ]]; then echo "praveen"; a=2; echo $a; fi| sed '1i================================\n output'
================================
 output

praveen
2
-2
20.08.2021, 11:08

Теги

Похожие вопросы