.
- finupsen
- Beiträge: 1327
- Registriert: 21.04.2004 20:07:05
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Re: Brauchste Programmierhilfe
moin,
> Aber irgendwie fehlen mir die nötigen Kenntnisse *schäm*
Was hindert dich daran dir die kentnisse anzueignen ?
> Aber irgendwie fehlen mir die nötigen Kenntnisse *schäm*
Was hindert dich daran dir die kentnisse anzueignen ?
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.
... und Wasser ist naß.
Re: Brauchste Programmierhilfe
In welcher Programmiersprache möchtest du denn programmieren? Zudem müsstest du genauer erklären, wie das Programm was genau machen soll.
Re: Brauchste Programmierhilfe
Aha!ghost90 hat geschrieben:Zeit !!!
habt ihr da irgendwie ein Quickstart guide oder so ?
Und Scheffe guckt schon ganz ungemütlich?
Re: Brauchste Programmierhilfe
Hallo,
so wie ich das sehe, sind die Kollegen der Meinung, das Du zu wenig Eigeninitiative
zeigst und werden Dir nicht einfach so ein fertiges codesnippet hinlegen. Hier ist ein
bißchen was zum reinarbeiten:
Mit echo läßt sich übrigens auch etwas in Dateien
reinschreiben | überschreiben | anhängen. Das sollen jetzt nur Ansätze sein. Beachte z.B.
was passiert, wenn testdatei mehr als eine Zeile hat.
Gruß Matthias
so wie ich das sehe, sind die Kollegen der Meinung, das Du zu wenig Eigeninitiative
zeigst und werden Dir nicht einfach so ein fertiges codesnippet hinlegen. Hier ist ein
bißchen was zum reinarbeiten:
Code: Alles auswählen
user@lenny:~$ cat testdatei
host derhostname
user@lenny:~$ wert=`cat testdatei | awk '{print $2}'`
user@lenny:~$ echo $wert
derhostname
user@lenny:~$ wert1=derhostname
user@lenny:~$ if [ $wert = $wert1 ]; then echo "Wahnsinn"; else echo "Das war nix..";fi
Wahnsinn
user@lenny:~$ wert1=blafasel
user@lenny:~$ if [ $wert = $wert1 ]; then echo "Wahnsinn"; else echo "Das war nix..";fi
Das war nix..
user@lenny:~$
reinschreiben | überschreiben | anhängen. Das sollen jetzt nur Ansätze sein. Beachte z.B.
was passiert, wenn testdatei mehr als eine Zeile hat.
Gruß Matthias
Re: Brauchste Programmierhilfe
Auf tldp.org gibt es zwei schöne Einführungen. Mal nach bash und guide suchen...
cu,
niemand
cu,
niemand
Re: Brauchste Programmierhilfe
Mit sed könnte man vielleicht die entsprechende Zeile der 2ten Datei noch ändern.
Bspw.:
Bspw.:
Code: Alles auswählen
daniel@daniel-laptop:/tmp$ cat daniel
host *hostname* {
hardware ethernet *mac-adresse*
fixed-address *ipadresse*
}
daniel@daniel-laptop:/tmp$ sed -i 's/^host.*$/host myhostname \{/g' daniel
daniel@daniel-laptop:/tmp$ cat daniel
host myhostname {
hardware ethernet *mac-adresse*
fixed-address *ipadresse*
}
Oh, yeah!
Re: Brauchste Programmierhilfe
Aus der Datei1 kannst du den hostnamen mit awk '{print $2}' auslesen, wie es Matthias-GEgeschrieben hat.
Oh, yeah!
-
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Re: Brauchste Programmierhilfe
Du hast Leerzeichen in den Werten, probier es mal so:
Code: Alles auswählen
if [ "$WERT1" = "$WERT2" ]; then echo "Wahnsinn"; else echo "Das war nix..";fi
Re: Brauchste Programmierhilfe
Dies sollte dann so funktionieren:
Code: Alles auswählen
daniel@daniel-laptop:/tmp$ wert="host beliebername1 {"
daniel@daniel-laptop:/tmp$ cat datei2
host beliebigername1 {
hardware ethernet *1mac-adresse*
fixed-address *1ipadresse*
}
daniel@daniel-laptop:/tmp$ sed -i "s/^host.*$/$wert/g" datei2
daniel@daniel-laptop:/tmp$ cat datei2
host beliebername1 {
hardware ethernet *1mac-adresse*
fixed-address *1ipadresse*
}
Oh, yeah!
Re: Brauchste Programmierhilfe
Code: Alles auswählen
#!/bin/bash
mk-test-data() {
for (( i=$1 ; i<=$2 ; i+=$3 )) ; do
echo "host testhost-$i {"
echo "hardware ethernet 00:00:00:00:$4:$(printf '%02d' $i)"
echo "fixed-address 1.2.3.$i"
echo "}"
done
}
collect() {
awk '
/^host / { h=$2 }
/^hardware / { h2m[h]=$3 }
/^fixed/ { h2i[h]=$2 }
END {
for( h in h2m ) {
print "host " h " {"
print "hardware ethernet " h2m[h]
print "fixed-address " h2i[h]
print "}"
}
}
'
}
{ mk-test-data 2 10 2 aa ; mk-test-data 3 10 3 bb ; } | collect
collect liest, was ihm auf stdin vorgeworfen wird ein und speichert die MAC und die IP-Adresse in 2 Dictionaries unter dem Schlüssel des zuvor auftauchenden hostname.
Das hat den Effekt, daß ein später nochmal auftauchender Definitionsblock zu einem schon bekannten hostname dessen Daten überschreibt und so bleibt nur die letzte Sichtung von Daten zu einem bestimmten hostname gespeichert.
Am Ende wird das janze Jedöns auf stdout ausgegeben, hier bestimmt awk, in welcher Reihenfolge. Man müsste erst noch alle Schlüssel sortieren, aber das stört vielleicht ja garnicht...
Damit reduziert sich das Zusammenführen der beiden Dateien auf hintereinander collect zum Fraß vorwerfen à la "cat datei1 datei2 | collect > datei3".
Die Ausgabe:
Code: Alles auswählen
host testhost-10 {
hardware ethernet 00:00:00:00:aa:10
fixed-address 1.2.3.10
}
host testhost-2 {
hardware ethernet 00:00:00:00:aa:02
fixed-address 1.2.3.2
}
host testhost-3 {
hardware ethernet 00:00:00:00:bb:03
fixed-address 1.2.3.3
}
host testhost-4 {
hardware ethernet 00:00:00:00:aa:04
fixed-address 1.2.3.4
}
host testhost-6 {
hardware ethernet 00:00:00:00:bb:06
fixed-address 1.2.3.6
}
host testhost-8 {
hardware ethernet 00:00:00:00:aa:08
fixed-address 1.2.3.8
}
host testhost-9 {
hardware ethernet 00:00:00:00:bb:09
fixed-address 1.2.3.9
}
-
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Re: Brauchste Programmierhilfe
Da muss ein Leerzeichen vor ]:
Code: Alles auswählen
if [ "$KOMMENTAR" == "#" ]
Re: Brauchste Programmierhilfe
Kann Kommentar denn überhaupt nur das #-Zeichen sein, oder ist in der gesamten Zeile am Zeilenanfang das #-Zeichen?
Wie sieht denn dein bisheriges Skript aus?
Wie sieht denn dein bisheriges Skript aus?
Code: Alles auswählen
daniel@daniel-laptop:/tmp$ cat test
1. Zeile ohne Kommentar
#2.Zeile mit Kommentar
3. Zeile ohne Kommentar
# 4. Zeile mit Kommentar
...
daniel@daniel-laptop:/tmp$ awk '/^#/' test
#2.Zeile mit Kommentar
# 4. Zeile mit Kommentar
daniel@daniel-laptop:/tmp$ sed -ne 's/^\(#\).*$/\1/p' test
#
#
Oh, yeah!
Re: Brauchste Programmierhilfe
Würde es z.B. mit sed machen.
Gibt die nur die 5 Zeile aus.
Oder wie meinst du das?
Code: Alles auswählen
sed -n '5p' file
Oder wie meinst du das?
Oh, yeah!
Re: Brauchste Programmierhilfe
Vielleicht kannst du mal ein Beispiel posten.
Was gegeben ist und wie du es gerne hättest.
Was gegeben ist und wie du es gerne hättest.
Oh, yeah!