PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash und if hinterinander



Roki
09-05-2010, 00:05
Hallo

also nmap sucht im netz, wenn der die ip (192.168.2.100 ond 192.168.2.101) findet, dann im netz.html nur text ändern, von inaktiv in aktiv, wenn ich das so mache;


#!/bin/bash
nmap -sP 192.168.2.1-255 | grep "for" | awk '{print $5}' | while read line ;do

html=`cat netz.html`

if [ $line == 192.168.2.100 ] ; then
html=`echo "$html" | sed "/uli/ s/inaktiv/aktiv/"`
echo "$html" > netz.html
else
html=`echo "$html" | sed "/uli/ s/aktiv/inaktiv/"`
echo "$html" > netz.html
fi

if [ $line == 192.168.2.101 ] ; then
html=`echo "$html" | sed "/leo/ s/inaktiv/aktiv/"`
echo "$html" > netz.html
else
html=`echo "$html" | sed "/leo/ s/aktiv/inaktiv/"`
echo "$html" > netz.html
fi

done

ändert er nur leo von inaktiv in aktiv, uli will er nicht, obwohl uli mit nmap gefunden wird....ich bin mir sicher das ich bei if etwas nicht verstanden habe...also, was habe ich falsch gemacht?

Danke im voraus für Antwort

Gruss,
Roki

peschmae
09-05-2010, 08:54
Das Problem ist, dass


html=`cat netz.html`

Die HTML-Datei ausliest. Mit dem ersten if-block überschreibst du die Datei. Mit dem zweiten if-Block überschreibst du die Datei nochmal, womit du natürlich die Ergebnisse vom ersten if-Block zerstörst.

Zusätzlich machst du das ganze bei jedem Durchlauf in der For-Schleife. Das heisst, selbst wenn in der ersten Zeile (erster For-Schleifendurchlauf) uli als aktiv erkannt wird, wird er das ja nicht beim zweiten Schleifendurchlauf (weil da z.B. line == 192.168.2.101 ist) und dann wird er da wieder zurückgesetzt.

Du möchtest wohl eher sowas in die Richtung


NM=$(nmap -sP 192.168.2.1-255);
FILE=netz.html

if echo $NM | grep -q 192.168.2.100; then
sed '/uli/ s/inaktiv/aktiv/' -i $FILE
else
sed '/uli/ s/aktiv/inaktiv/' -i $FILE
end

etc


MfG Peschmä

Roki
09-05-2010, 12:23
Hallo Peschmä,
Danke für Antwort...

wenn ich das so versuche:


#!/bin/bash

NM=$(nmap -sP 192.168.2.1-255);
FILE=netz.html

if echo $NM | grep -q 192.168.2.100; then
sed '/uli/ s/inaktiv/aktiv/' -i $FILE
else
sed '/uli/ s/aktiv/inaktiv/' -i $FILE
end


kommt:
Zeile 11: Syntax Fehler: Unerwartetes Dateiende. :confused:

Gruss,
Roki

John W
09-05-2010, 14:11
"fi", nicht "end"

Roki
09-05-2010, 14:48
stimmt, Danke!

so funktioniert es:

#!/bin/bash

NM=$(nmap -sP 192.168.2.1-255)
FILE=netz.html

if echo $NM | grep -q "192.168.2.100" ; then
sed '/uli/ s/inaktiv/aktiv/' -i $FILE
else
sed '/uli/ s/aktiv/inaktiv/' -i $FILE
fi

if echo $NM | grep -q "192.168.2.101" ; then
sed '/leo/ s/inaktiv/aktiv/' -i $FILE
else
sed '/leo/ s/aktiv/inaktiv/' -i $FILE
fi

exit 0

Gruss,
Roki