1

У меня есть приложение, которое требует от вас ввести свой IP-адрес в качестве параметра, как мне использовать bash-скрипт, чтобы автоматически получить IP-адрес и вставить его в качестве параметра для программы?

4 ответа4

1

Или просто:

ipaddr=$(ifconfig wlan0 | awk '/inet addr:/ {gsub("addr:","",$2); print $2}')
1

Обратите внимание , что этот вывод может несколько адресов, так как «адрес» не обязательно в настоящее время было правдой на протяжении многих лет.

Linux

Использование iproute2 и awk:

ip addr show scope global | awk '$1 ~ /^inet/ {print $2}'
ip -4 addr show scope global | awk '$1 == "inet" {print $2}'
ip -6 addr show scope global | awk '$1 == "inet6" {print $2}'

Используя недавнюю поддержку JSON в iproute2:

ip -json addr show scope global | jq -r '.[] | .addr_info | .[] | .local'
ip -json -4 addr show scope global | jq -r '.[] | .addr_info | .[] | .local'
ip -json -6 addr show scope global | jq -r '.[] | .addr_info | .[] | .local'

ip -json addr | jq -r '.[] | .addr_info | .[] | select(.scope == "global") | .local'
ip -json addr | jq -r '.[] | .addr_info | .[] | select(.family == "inet" and .scope == "global") | .local'
ip -json addr | jq -r '.[] | .addr_info | .[] | select(.family == "inet6" and .scope == "global") | .local'

FreeBSD

Использование FreeBSD ifconfig и awk (фильтрация по области немного сложнее):

ifconfig -a | awk '$1 ~ /^inet/ {print $2}'
ifconfig -a | awk '$1 == "inet" {print $2}'

Также обратите внимание, что ifconfig имеет много разных стилей вывода между разными ОС - даже Linux имеет как минимум три версии.

1

Если вы можете установить moreutils используйте ifdata:

ifdata - получить информацию о сетевом интерфейсе без разбора вывода ifconfig

[...]

-pa
Печатает IPv4-адрес интерфейса.

Пример:

ifdata -pa wlan0            # print the address
ipaddr=$(ifdata -pa wlan0)  # assign to variable
0

Мне удалось найти ответ после поиска ответа на вопрос «Помещение IP-адреса в переменную bash». Есть ли способ лучше."

Это просто требует небольшой настройки, где вместо ifconfig, его ifconfig wlan0. Затем мне пришлось использовать обратный тик, чтобы подключить его к переменной.

Так что мне удалось приступить к работе с кодом

ipAddr = "$(ifconfig wlan0 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1 }')"
./myApp $ipAddr

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .