У меня есть приложение, которое требует от вас ввести свой IP-адрес в качестве параметра, как мне использовать bash-скрипт, чтобы автоматически получить IP-адрес и вставить его в качестве параметра для программы?
4 ответа
Или просто:
ipaddr=$(ifconfig wlan0 | awk '/inet addr:/ {gsub("addr:","",$2); print $2}')
Обратите внимание , что этот вывод может несколько адресов, так как «адрес» не обязательно в настоящее время было правдой на протяжении многих лет.
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 имеет как минимум три версии.
Мне удалось найти ответ после поиска ответа на вопрос «Помещение 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