xml parse und update in sql

0

081569

Grünschnabel
hallo,

habe mir bereits einenn eigenen xml paser in bash geschrieben, der auch soweit sogut funktioniert.
da er in einer endloschleife läuft und nur in die sql updaten soll wenn daten vorhanden sind habe ich da so ein problem das er mir ständig in die sql updatet obwohl der wert 0 ist und ich finde den fehler nicht:

#!/bin/bash

while true;
do

zero=0

key=`awk '/<key>/ {stp=index($0,">")+1; \
newstr=substr($0,stp); \
etp=index(newstr,"<"); \
print substr(newstr,0,etp); \
}' test.xml`
if ["$key" = ""]; then
key=$zero
fi


if ["$key" = "0"]; then
echo "no insert"
done
else
mysql --user=user --password=password WAS -e "INSERT INTO protokoll VALUES(CURRENT_TIMESTAMP,'${key}');"
sleep 10
done
fi

desweiteren soll er nicht updaten wenn sich der key zu vorigen durchlauf nicht verändert hat.... vielleicht aht auch jemand einen tipp dazu,

danke!

g.
 
Zuletzt bearbeitet:
Wenn du $key leer lassen würdest, würde [] auch false zurückgeben... aber dein Konstrukt mit dem if-Zeugs funktioniert so schon, wie es soll. Hast du mal geschaut, was in $key steht? Beachte ausserdem, das in den Klammern auch Leerzeichen stehen müssen, also
Code:
[ "$key" = "0" ]; then
statt
Code:
["$key" = "0"]; then
 
Zuletzt bearbeitet:
in $key steht wenn awk nix findet also ="" eine "0" habe dass dann auch so in der datenbank stehen.

also diese :
if ["$key" = ""]; then
key=$zero
fi

funzen, habe mehrere davon drinnen und wenn nix im html tag steht habe ich nur nullen in der datenbank..... dass passt auch so

frage als bash neuling, sind diese leerzeichen so elementar?

danke!
 
Sind sie, ja. (Mit ist das erst am Ende aufgefallen, das die bei dir fehlen...)
 
super danke!, das funzt jetzt!

aber, kann ich aus einer while schleife nicht mit done wieder zum anfang
springen?? wie dann?

im detail:

if [ "$key" = "0" ]; then
echo "no insert";
done // dieses done bemängelt die shell
sleep 10
else
echo "instert";
sleep 10
fi
done

danke!
 
if-Schleifen werden mit fi beendet, while-Schleifen mit done.

Also passen deine beiden done's im if überhaupt nicht. Wenn du die nach das fi stellst, sollte es sich so verhalten, wie du dir das vorstellst.

/Edit: Wenn du Codestücke postest, wäre es übersichtlicher, wenn du die in [noparse]
Code:
[/noparse]-Blöcke stellen würdest.
 
danke! hatte einen denkfehler! funzt!
alles klar werde zukünftig den code tag benutzen!
danke!
 

Ähnliche Themen

script sshpass

Datei auslesen und fund per MAil versenden.

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Mit awk ein textfile parsen und SQL daraus erzeugen.

'xml Parser' in bash

Zurück
Oben