PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shell-Problem



clumsy
24-02-2004, 13:09
Hallo,

ich habe in einer Variablen A eine IP-Adresse drin stehen...also zB 192.168.216.1
Jetzt will ich die IP des zugehörigen Partnerrechners in einer anderen Variablen B speichern. Die IP ist immer die letzten 8 Bit der A-Adresse +1. Also zB

A=192.168.216.1 -> B=192.168.216.2
A=192.168.216.45 -> B 192.168.216.46

Wenn A gegeben ist, wie kann ich dann B durch ein kleines Shellscript erhalten??

Mein bisheriger Lösungsansatz ist sowas dieser Art:


set $(echo "192.168.216.10" | tr "." " ")
IP_Part=$4+1
echo $IP_Part


Das Problem: IP_Part ist nachher nicht 11, sondern "10+1"!!!! Warum? Wie mach ich ne Addition denn richtig?

Danke!
clumsy

PS: Ich hab momentan einige solche "kleinen" Probleme....kennt mir jemand ein gutes Einstiegsbuch oder ne gute Seite?

peschmae
24-02-2004, 13:12
Etwa so



NEWIP=$(echo $OLDIP | sed 's/[0..9]*\.[0..9]*\.[0..9]*\.//')
NEWIP=$(eval $OLDIP + 1)


MfG Peschmä

clumsy
24-02-2004, 15:00
geht irgendwie nicht....

So wie ich das seh, bewirkt die erste deiner Zeilen, dass in NEWIP nichts drinsteht, also alles vor dem letzten Teil der IP weggeschnitten wird.

phate
24-02-2004, 15:12
Hi clumsy,

wie peschmae aufgezeigt hat, kannst Du für einfache Rechenoperationen auf 'eval' zurückgreifen. Das kannst Du für Deine bisherigen Code-Fragmente verwenden oder aber auch wie in dem von Peschmae angedeuteten. Dort müsste es nur korrekterweise heißen
NEWIP=$(echo $OLDIP | sed 's/[0..9]*\.[0..9]*\.[0..9]*\.//')
NEWIP=$(eval $NEWIP + 1)Man beachte die geänderte zweite Zeile. Ich hoff' doch mal, dass Du das nicht 1:1 übernommen hattest....

samsara
24-02-2004, 17:37
Original geschrieben von clumsy
PS: Ich hab momentan einige solche "kleinen" Probleme....kennt mir jemand ein gutes Einstiegsbuch oder ne gute Seite?

Google: advanced bash scripting guide. In Englisch.

Gruss,

Samsara

peschmae
24-02-2004, 18:32
argh. Unter Windows 2000 kann man keine Unix-Shellscripts schreiben. Ich bin entschuldigt ;)

Dafür jetzt ganz nett: Habe mal wieder eval und expr verwechselt. Das ganze ein bisschen verbessert und als Einzeiler sieht jetzt so aus:


NEWIP=$(echo $OLDIP | sed 's/\(\([0-9]\{1,3\}\.\)\{1,3\}\).*/\1/')$(expr $(echo $OLDIP | sed 's/\([0-9]\{1,3\}\.\)\{1,3\}//') + 1)


:D

Naja. Nicht unbedingt lesbar - geht aber bei mir.

Zu Bash:
http://www.tldp.org/LDP/abs/html/
http://www.freeos.com/guides/lsst/index.html

Und zu Sed:
http://www.grymoire.com/Unix/Sed.html

Zudem ist das Shellscript txt2regex noch recht nützlich.

MfG Peschmä

peschmae
24-02-2004, 21:01
argh. Es geht noch viel einfacher.



set $(echo $OLDIP | tr "." " ")
NEWIP=$1.$2.$3.$(expr $4 + 1)


Erklärung:

tr ersetzt die "." durch " " - also wird aus der IP z.B. 192 168 3 84
set setzt die Variablen 1 bis n, jeweils eine neue Variablen nach einem Leerschlag
1=192
2=168
3=3
4=84
expr addiert 1

et voilà :)

MfG Peschmä

P.S. mit sed siehts aber kultiger aus :p

clumsy
24-02-2004, 22:11
set $(echo $OLDIP | tr "." " ")
NEWIP=$1.$2.$3.$(expr $4 + 1)


mit set und tr hab ich's jetzt auch gelöst gehabt :)
sed ist mir noch etwas zu heftig fürn Anfang....


Danke!
Die Shell-Links sind wirklich gut!!

clumsy

peschmae
25-02-2004, 08:43
set ist mir erst kürzlich bekannt gemacht geworden. Draum ist es mir noch nicht so geläufig wie sed.

Sed ist nicht wirklich schwierig (regexps halt) - allerdings ist das Escapen manchmal ein bisschen unpraktisch kompliziert.

MfG Peschmä

systemdefender
03-03-2004, 23:07
echo $OLDIP | awk -F. '{print $1"."$2"."$3"."$4+4}' -

cu

peschmae
04-03-2004, 07:07
:p

Ich glaub gut oder schlecht können gibts hier nicht - nur können und nicht können.

MfG Peschmä

systemdefender
04-03-2004, 08:37
jetzt fängt das wieder an. :rolleyes: ich hab awk weder erfunden noch entdeckt ;)

ich mag diese ohne-das-schlechte-gibt-es-auch-das-böse-nicht-disskussionen nicht.

wir könnten aber noch ne dc version gebrauchen:p

wir sind doch alle zum lernen hier, oder?

cu

ps: und ich find's doch besser:p (sollte ich jetzt doch mal IMHO sagen?)

e/ ps anm.

peschmae
04-03-2004, 09:20
Gut :)

Wo gibts ein gutes Tutorial für das gute AWK? Das sollte ich wohl auch mal können. Nein, ich will mir kein Buch kaufen.

MfG Peschmä

systemdefender
04-03-2004, 10:01
Original geschrieben von peschmae
Wo gibts ein gutes Tutorial für das gute AWK? Das sollte ich wohl auch mal können.
Nein, ich will mir kein Buch kaufen.

das ist aber schade. du weisst doch: alles gute kommt von O'Reilly ;)

ich würde empfehlen ...

einführung: http://www.linuxjournal.com/article.php?sid=2533
tutorials:
- http://www.ugcs.caltech.edu/info/gawk/
- http://sparky.rice.edu/~hartigan/awk.html
- http://robert.wsi.edu.pl/awk/start.html
referenz: man ist als referenz teilweise, aber als gedächnisstütze brauchbar.


cu

e/add tutor.

peschmae
04-03-2004, 14:37
Danke. Für meinen Geschmack gerade ein bisschen viele - aber ich werd mal schauen was mir gefällt.

O'Reilly? Mal ehrlich, ich hab nur ein Buch von O'Reilly - und das ist Free as in Freedom - www.faifzilla.org

MfG Peschmä

systemdefender
04-03-2004, 18:27
ich meinte eher die sachbücher.
sendmail, sed&awk, bash in a nutshell, regular expressions und die perl-reihe hab ich mir reingezogen.
leicht zu kauen, aber schwer verdaulich *gg* war nicht verkehrt.
aber zu teuer die dinger. habe aber zu der zeit in 'ner linux-security-firma als developer gearbeitet und da stand sowas (zu meinem vergnügen) im schrank ;)

- sd -