BASH. Как узнать IP адрес сетевого интерфейса?
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 17
- ОС: Debian
BASH. Как узнать IP адрес сетевого интерфейса?
Собственно, необходимо занести в переменную IP адрес сетевого интерфейса eth0, который выдаётся динамически.
Как это можно реализовать?
Языком сценариев Bash, практически не владею (на уровне echo"Hello"), но вижу, это примерно, так:
1. Копирую в файл вывод команды ifconfig eth0
2. В цикле, посимвольно перебираю этот временный файл.
3. Найдя, строчку "inet addr:", отсчитываю 15 символов (XXX.XXX.XXX.XXX), которые составляют сам IP адрес
4. Заношу, эти 15 символов, в переменную.
5. Удаляю, временный файл.
Как это можно реализовать?
Языком сценариев Bash, практически не владею (на уровне echo"Hello"), но вижу, это примерно, так:
1. Копирую в файл вывод команды ifconfig eth0
2. В цикле, посимвольно перебираю этот временный файл.
3. Найдя, строчку "inet addr:", отсчитываю 15 символов (XXX.XXX.XXX.XXX), которые составляют сам IP адрес
4. Заношу, эти 15 символов, в переменную.
5. Удаляю, временный файл.
-
- Сообщения: 438
- Статус: Подопытный участник
Re: BASH. Как узнать IP адрес сетевого интерфейса?
IP=$(ifconfig eth0| sed -n '2 {s/^.*inet addr:\([0-9.]*\) .*/\1/;p}')
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
-
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: BASH. Как узнать IP адрес сетевого интерфейса?
1. Копирую в файл вывод команды ifconfig eth0
2. В цикле, посимвольно перебираю этот временный файл.
3. Найдя, строчку "inet addr:", отсчитываю 15 символов (XXX.XXX.XXX.XXX), которые составляют сам IP адрес
4. Заношу, эти 15 символов, в переменную.
5. Удаляю, временный файл.
Кошмар какой, срочно читать любую книжку по скриптингу, или даже статью, вот например:
http://www.ibm.com/developerworks/library/l-bash.html
http://www.ibm.com/developerworks/library/l-bash2.html
http://www.ibm.com/developerworks/library/l-bash3.html
Правильный способ выше уже сказали, а если чуть менее страшно выглядящий и без sed'а, то вот:
Код: Выделить всё
IP=`ifconfig eth0 | grep "inet addr" | head -n 1 | cut -d : -f 2 | cut -d " " -f 1`
А с использованием ip вместо ifconfig, будет работать даже не из под рута:
Код: Выделить всё
IP=`ip addr list eth0 | grep " inet " | head -n 1 | cut -d " " -f 6 | cut -d / -f 1`
Спасибо сказали:
-
- Сообщения: 246
- ОС: Solaris, Debian, Ubuntu
Re: BASH. Как узнать IP адрес сетевого интерфейса?
Ну вот как-то так:
PS: уже опередили
Код: Выделить всё
ifconfig eth0 | sed -n '/inet addr:/s/^[^:]*:\([0-9\.]*\).*/\1/gp'
PS: уже опередили

Спасибо сказали:
-
- Ведущий рубрики
- Сообщения: 4333
- Статус: ⚝⚠⚒⚑⚖☭☞☣☤&
Re: BASH. Как узнать IP адрес сетевого интерфейса?
Настоятельно рекомендую вместо устаревшего замшелого ifconfig использовать более современный инструмент ip
Например, вместо
Код: Выделить всё
ifconfig eth0
Код: Выделить всё
ip a s eth0
Само собой, способ "вырезания" адреса немного изменится:
Код: Выделить всё
IP=`ip a s eth0 | grep "inet" | cut -d "/" -f 1 | cut -c 10-`
Спасибо сказали:
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: BASH. Как узнать IP адрес сетевого интерфейса?
Для вывода информации об интерфейсах ifconfig-у совсем не нужны права рута. Другой вопрос, что он лежит в /sbin, который далеко не во всех дистрибутивах по умолчанию включается в пользовательский $PATH. Но это решается указанием полного пути.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 17
- ОС: Debian
Re: BASH. Как узнать IP адрес сетевого интерфейса?
Всем спасибо за оперативную помощь. Буду разбираться, пробовать.
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: BASH. Как узнать IP адрес сетевого интерфейса?
При всём уважении к Роббинсу, эа статья мне совершенно не понравилась. Увидев имя, подумал, неужели на developerworks-е всё-таки встречаются стоящие материалы? Прочитав немного, понял: стандартное для этого ресурса качество ниже среднего.rm_ писал(а): ↑03.06.2010 11:45Кошмар какой, срочно читать любую книжку по скриптингу, или даже статью, вот например:
http://www.ibm.com/developerworks/library/l-bash.html
http://www.ibm.com/developerworks/library/l-bash2.html
http://www.ibm.com/developerworks/library/l-bash3.html
По прежнему порекомендую "Advanced bash scripting guide":
http://tldp.org/LDP/abs/html/
http://rus-linux.net/MyLDP/BOOKS/abs-guide...t/abs-book.html
Более кратких материалов сравнимого качества так и не нашёл.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 481
- ОС: Ubuntu
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: BASH. Как узнать IP адрес сетевого интерфейса?
Код: Выделить всё
$ apt-file search /bin/ip | grep ip$
iproute: /bin/ip
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: BASH. Как узнать IP адрес сетевого интерфейса?
вроде бы самый короткий код:
Код: Выделить всё
IP=$(ip -o -f inet a sh eth0 | grep -Eo '[0-9.]{7,}')
пакет iproute[2], только бинарник в некоторых дистрибутивах запихивают в /sbin и не всегда делают симлинк в /bin.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 2
Re: BASH. Как узнать IP адрес сетевого интерфейса?
Значит не актуально, удалил.
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: BASH. Как узнать IP адрес сетевого интерфейса?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 2
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: BASH. Как узнать IP адрес сетевого интерфейса?
ну, как бы раздел называется «работа в командной строке». скрипты-то тут при чём? скрипты — это куда-то в сторону «программирование».
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: BASH. Как узнать IP адрес сетевого интерфейса?
На баше все то, что вы написали выглядит в разы короче:
Код: Выделить всё
wget -qO - 2ip.ru|egrep -m 1 -o "([0-9]+\.){3}[0-9]+"
Только вот ip интерфейса и внешний ip часто совсем не совпадают.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Ведущий рубрики
- Сообщения: 4333
- Статус: ⚝⚠⚒⚑⚖☭☞☣☤&
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: BASH. Как узнать IP адрес сетевого интерфейса?
Вчера на месте этого сообшения был скрипт на питоне, который лезет на 2ip.ru и достает внешний ip адрес.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.