Acties:
  • 0 Henk 'm!

  • Maikel123
  • Registratie: Februari 2010
  • Laatst online: 28-09 09:16
Hallo,

Ik ben een beetje aan het kijken na bash scripting, Nou heb ik een simpel batch script geschreven die IP configuratie laat zien zoals Ipconfig van windows doet. Het script werkt ook helemaal na behoren maar ik vind het nog niet zo netjes, want als ik nu bijvoorbeeld 3 interfaces heb word het command ifconfig 9x opgeroepen.

Ik wou kijken of het niet mogelijk is om de ifconfig een keer gebruiken en dat opslaan in een variable, probleem is met variable is het word een regel, en zelf zou het de opmaak hebben weet ik ook niet zo goed hoe ik alleen de gegevens van bijvorbeeld eth1 laten zien.

Script ziet er nu zo uit:

Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/bash
#
#Ipconfig script description:
#This script will show the Hostname, DNS servers, Default gateway and 
#IP, Subnet, MAC address for all the interfaces. If you only want to 
#show one interface put interface behind the script like this:
#ipconfig eth0
#
# Ensure that root is running the script.
##
WHOAMI=`/usr/bin/whoami`
if [ $WHOAMI != "root" ]; then
echo "You must be $(tput setaf 1)$(tput bold)root$(tput sgr0) to run this script!"
exit 1
fi
# End root
#hostname
HOSTNAME=$(hostname)
#DNS
DNS=$(grep "nameserver" /etc/resolv.conf | cut -d" " -f 2)
#Default gateway
GATEWAY=$(route -n | grep '^0\.0\.\0\.0[ \t]\+[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*[ \t]\+0\.0\.0\.0[ \t]\+[^ \t]*G[^ \t]*[ \t]' | awk '{print $2}')
clear
echo Hostname:$(tput setaf 1) $HOSTNAME $(tput sgr0)
y=1
for i in $DNS
do
  echo "DNS $y: $i"
  y=$[$y+1]
done
echo 
echo Default gateway: $GATEWAY
echo 
case $1 in 
    '')
#When no interface is given it will show avery interface
ALLINT=$(ifconfig -a |cut -d" " -f1 | grep -v '^$')
y=1
for i in $ALLINT
do
  INTIP=$(ifconfig $i | grep "inet addr:" | cut -d" " -f 12 | cut -b6-30)
  INTSUB=$(ifconfig $i | grep "inet addr:" | cut -d" " -f16 | cut -b6-30)
  INTMAC=$(ifconfig $i | grep HWaddr | cut -d" " -f 11)
  echo Interface $(tput setaf 1)$i:$(tput sgr0)
  echo IP address: $INTIP
  echo Subnetmask: $INTSUB
  echo "MAC:        $INTMAC"
  echo
  y=$[$y+1]
done ;;
#When a interface is given it will show that interface
    *)
  INTIP=$(ifconfig $1 | grep "inet addr:" | cut -d" " -f 12 | cut -b6-30)
  INTSUB=$(ifconfig $1 | grep "inet addr:" | cut -d" " -f16 | cut -b6-30)
  INTMAC=$(ifconfig $1 | grep HWaddr | cut -d" " -f 11)
  echo Interface $(tput setaf 1)$1:$(tput sgr0)
  echo IP address: $INTIP
  echo Subnetmask: $INTSUB
  echo "MAC:        $INTMAC"
  echo ;;
esac


Als iemand mij de goede richting op kan wijzen hoe je dit moet doen of dat het wel mogelijk is :P

Acties:
  • 0 Henk 'm!

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 04-08 16:29

Tim

Ik had hier een verhaal neergezet met hints, maar dit is denk ik duidelijker..
De samenvatting is: awk

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

echo Hostname: $(hostname)
echo Default gateway: $(ip route show | awk '$1 == "default" { print $3 }')
echo

awk 'BEGIN { i=0 } $1 == "nameserver" { print "DNS", i++ ":", $2 }' < /etc/resolv.conf
echo

ifconfig $1 | awk '''
/^\w/ { iface=$1; addr=subnet=mac="" } 
/inet addr:/ { addr=substr($2,6) }
$3 ~ /Bcast:/ { subnet=substr($3,7) }
/HWaddr/ { mac=$NF }
/^$/ { print "Interface " iface "\nIP address: " addr "\nSubnetmask: " subnet "\nMAC: " mac "\n" }
'''

Verder zou je nog kunnen kijken naar het vervangen van "ipconfig" door "ip addr show".

Acties:
  • 0 Henk 'm!

  • Maikel123
  • Registratie: Februari 2010
  • Laatst online: 28-09 09:16
Thx voor de info, ga vanmiddag er na kijken ook hoe awk nou werkt :D

Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 02-10 22:42

CAPSLOCK2000

zie teletekst pagina 888

Maikel123 schreef op dinsdag 24 mei 2011 @ 22:18:
Ik wou kijken of het niet mogelijk is om de ifconfig een keer gebruiken en dat opslaan in een variable, probleem is met variable is het word een regel, en zelf zou het de opmaak hebben weet ik ook niet zo goed hoe ik alleen de gegevens van bijvorbeeld eth1 laten zien.
even op dit detail ingaande:

casper@raki:~$ tmp=$(cal)
casper@raki:~$ echo $tmp
Mei 2011 zo ma di wo do vr za 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
casper@raki:~$ echo "$tmp"
      Mei 2011        
zo ma di wo do vr za  
 1  2  3  4  5  6  7  
 8  9 10 11 12 13 14  
15 16 17 18 19 20 21  
22 23 24 25 26 27 28  
29 30 31  


Als je de quotes om de variabele heenzet blijven de regelovergangen wel bewaard.

This post is warranted for the full amount you paid me for it.


Acties:
  • 0 Henk 'm!

  • Maikel123
  • Registratie: Februari 2010
  • Laatst online: 28-09 09:16
bedankt, handig om te weten :P