Если я хочу отобразить IP-адрес, назначенный eth1, как я могу сделать это в Bash?
Попробуйте это (Linux)
/sbin/ifconfig eth1 | grep 'inet addr:' | cut -d: -f2| cut -d' ' -f1
или это (Linux)
/sbin/ifconfig eth0 | awk -F ' *|:' '/inet addr/{print $4}'
или это (* BSD)
ifconfig bge0 | grep 'inet' | cut -d' ' -f2
или это (Solaris 10)
ifconfig e1000g0 | awk '/inet / {print $6}'
Очевидно, измените имя интерфейса, чтобы оно соответствовало тому, из которого вы хотите получить информацию.
Лучший способ: получить IP-адрес из команды "ip", потому что "ifconfig" устарел. В противном случае вы столкнетесь с проблемой при использовании «ifconfig», потому что вывод ifconfig зависит от языка.
Я использую эту команду для получения всех IP-адресов (IPv4):
ip addr show | grep -o "inet [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"
В системе Linux:
hostname --all-ip-addresses
даст вам только IP-адрес.
В системе Solaris используйте:
ifconfig e1000g0 | awk '/inet / {print $2}'
Как упомянул @Manuel, ifconfig
устарело, и ip
- это рекомендуемый подход в будущем.
ip -f inet addr show eth1
и использовать sed @ bleater или awk @Jason H. для фильтрации вывода (в зависимости от того, нужна ли вам маска)
ip -f inet addr show eth1 | sed -En -e 's/.*inet ([0-9.]+).*/\1/p'
ip -f inet addr show eth1 | awk '/inet / {print $2}'
может это поможет
ifconfig eth1
Один лайнер с sed:
ifconfig wlan0 | sed -En -e 's/.*inet ([0-9.]+).*/\1/p'
Замените wlan0 на желаемый интерфейс.
Я попробовал принятый ответ на CentOS 7, Но это не работает.
/sbin/ifconfig eth0 | grep 'inet ' | tr -s ' ' | cut -d" " -f3
работал у меня, если кто-то еще сталкивается с той же проблемой.