Как сформулировать условие для проверки в синтаксисе bash?

Как можно использовать утилиту nmcli для вывода только того интерфейса, у которого указан gateway? Вот как я выводил все интерфейсы: nmcli -t -f NAME c s -a. Но мне нужно вывести только тот, который имеет прописанный gateway.
  • 15 сентября 2023 г. 8:06
Ответы на вопрос 2
Для проверки, что интерфейс имеет прописанный gateway, вы можете использовать следующее условие в синтаксисе bash:

```bash
if nmcli -t -f NAME c s -a | grep -q "gateway"; then
    echo "Интерфейс с прописанным gateway: $(nmcli -t -f NAME c s -a | grep "gateway" | cut -d: -f2)"
else
    echo "Нет интерфейсов с прописанным gateway"
fi
```

Это условие сначала выполняет команду `nmcli -t -f NAME c s -a`, которая выводит все интерфейсы с их настройками. Затем оно использует команду grep для поиска строк, содержащих ключевое слово "gateway". Если grep находит такие строки, значит есть интерфейсы с прописанным gateway, и условие выполнено. В этом случае будет выведено сообщение со списком таких интерфейсов. Если grep не находит ни одной строки с ключевым словом "gateway", значит интерфейсы с прописанным gateway отсутствуют, и будет выведено соответствующее сообщение.
Можно выполнить данное действие более элегантно. Вот более простая версия:

```
for i in $(nmcli -t -f NAME c s); do
  gateway=$(nmcli -t con show $i | grep IP4.GATEWAY | sed -e 's/IP4.GATEWAY://')
  if [ -n "$gateway" ]; then 
    echo $i
  fi 
done
```

Таким образом, мы сохраняем значение IP4.GATEWAY в переменную `gateway`, и затем проверяем, что она не пустая при помощи `[ -n "$gateway" ]`. Если она не пустая, выводим имя соединения `echo $i`.
Похожие вопросы