Toon posts:

Bash script hulp

Pagina: 1
Acties:

Acties:
  • 0Henk 'm!

  • Maikel123
  • Registratie: Februari 2010
  • Laatst online: 06-05 21:00
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:
  • 0Henk 'm!

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 17-04 05:57
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".

  • Maikel123
  • Registratie: Februari 2010
  • Laatst online: 06-05 21:00
Thx voor de info, ga vanmiddag er na kijken ook hoe awk nou werkt :D

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 27-05 13:25

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.


  • Maikel123
  • Registratie: Februari 2010
  • Laatst online: 06-05 21:00
bedankt, handig om te weten :P


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee