Для получения списка всех шлюзов по умолчанию используйте ответ mezgani , дублированный (и слегка упрощенный) здесь:
/sbin/ip route | awk '/^default/ { print $3 }'
Если у вас настроено несколько сетевых интерфейсов одновременно, будет напечатано несколько шлюзов. Если вы хотите выбрать один известный сетевой интерфейс по имени (например, eth1
), просто найдите этот в дополнение к фильтрации для строк ^default
:
/sbin/ip route |grep '^default' | awk '/eth1/ {print $3}'
Вы можете создать сценарий, который принимает в качестве аргумента одно имя сетевого интерфейса и печатает связанный шлюз:
#!/bin/bash
if [[ $# -ne 1 ]]; then
echo "ERROR: must specify network interface name!" >&2
exit 1
fi
# The third argument of the 'default' line associated with the specified
# network interface is the Gateway.
# By default, awk does not set the exit-code to a nonzero status if a
# specified search string is not found, so we must do so manually.
/sbin/ip route | grep '^default' | awk "/$1/ {print \$3; found=1} END{exit !found}"
Как отмечено в комментариях, это имеет преимущество в установке разумного кода завершения, который может быть полезен в более широком программном контексте.