Getting Network Information in Bash Scripts

Sometimes when writing your bash scripts, you may need some information about the network, such as the IP addresses, both IPv4 and IPv6, broadcast addresses, netmasks and such. There are two very basic ways of getting the necessary information in Linux systems, you should either choose the ip addr show method, and parse what’s coming out of it, or parse the output of ifconfig. Let’s deal with them both.

The “ip addr show” method

We will parse this output:

eaydin@eaydin:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 #link/ether 00:22:15:f6:55:e6 brd ff:ff:ff:ff:ff:ff
inet 192.168.16.30/24 brd 192.168.16.255 scope global eth0
inet6 fe80::222:15ff:fef6:55e6/64 scope link
valid_lft forever preferred_lft forever
IP ADDRESS :

ip addr show |grep -w inet |grep -v 127.0.0.1|awk '{ print $2}'| cut -d "/" -f 1
Output : 192.168.16.30


PREFIX (Netmask in CIDR Notation) :

ip addr show |grep -w inet |grep -v 127.0.0.1|awk '{ print $2}'| cut -d "/" -f 2
Output : 24


Broadcast IP :

ip addr show |grep -w inet |grep -v 127.0.0.1|awk '{ print $4}'
Output : 192.168.16.255


Device name :

ip addr show |grep -w inet |grep -v 127.0.0.1|awk '{ print $7}'
Output : eth0


IPv6 ADDRESS :

ip addr show |grep -w inet6 |grep -v ::1|awk '{ print $2}'| cut -d "/" -f 1
Output : fe80::222:15ff:fef6:55e6


IPv6 PREFIX (Netmask in CIDR Notation) :

ip addr show |grep -w inet6 |grep -v ::1|awk '{ print $2}'| cut -d "/" -f 2
Output : 64


Ethernet Card MAC Address :

ip addr show | grep -w ether | awk '{ print $2 }'
Output : 00:22:15:f6:55:e6


The “ifconfig” method

This time we’ll parse this output:

eaydin@eaydin:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:22:15:f6:55:e6
inet addr:192.168.16.30  Bcast:192.168.16.255  Mask:255.255.255.0
inet6 addr: fe80::222:15ff:fef6:55e6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:626934 errors:0 dropped:0 overruns:0 frame:0
TX packets:363506 errors:0 dropped:0 overruns:0 carrier:2
collisions:0 txqueuelen:1000
RX bytes:284072710 (284.0 MB)  TX bytes:56413838 (56.4 MB)
Interrupt:45
    
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:43339 errors:0 dropped:0 overruns:0 frame:0
TX packets:43339 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4834972 (4.8 MB)
  TX bytes:4834972 (4.8 MB)

IP ADDRESS :

ifconfig | grep -w inet |grep -v 127.0.0.1| awk '{print $2}' | cut -d ":" -f 2
Output : 192.168.16.30


Broadcast IP :
ifconfig | grep -w inet |grep -v 127.0.0.1| awk '{print $3}' | cut -d ":" -f 2
Output : 192.168.16.255


Netmask :

ifconfig | grep -w inet |grep -v 127.0.0.1| awk '{print $4}' | cut -d ":" -f 2
Output : 255.255.255.0


Device name :

ifconfig | grep HWaddr | cut -d " " -f 1
Output : eth0


IPv6 ADDRESS :

ifconfig | grep -w inet6 | grep -v ::1| awk '{ print $3 }' | cut -d "/" -f 1
Output : fe80::222:15ff:fef6:55e6


IPv6 PREFIX (Netmask in CIDR Notation) :

ifconfig | grep -w inet6 | grep -v ::1| awk '{ print $3 }' | cut -d "/" -f 2
Output : 64


Ethernet Card MAC Address :

ifconfig | grep HWaddr | awk '{ print $5 }'
Output : 00:22:15:f6:55:e6
  • 8 Users Found This Useful
Was this answer helpful?

Related Articles

Setting time with NTP in LINUX

NTP (Network Time Protocol) could be used to set time synced with ntp clocks, to do this use the...

Linux version & Operating System info

LINUX Version Info To learn the architecture and kernel version info use the shell command...

Compile and build Apache + MySQL + PHP from the source [cite]

This is a complete working solution to build Apache (httpd-2.2.25), MySQL (MySQL-5.6.14) and PHP...

Using vi Editor

Vi is the one of the mostly used editor in Linux via terminal. In most cases where Linux is used...

Build PHP5.5 on CentOS 6.4 with MSSQL Support [cite]

Most of the yum repos doesn’t include PHP5.5.X on current releases for the time being. So...