10. März 201015 j Hallo, ich hab folgendes Problem. ich will in einem skript mit "curl" http requests an einen server schicken. dazu hab ich mehrere dateien in denen meine parameter liegen die in den requests mitgeschickt werden sollen. diese übergebe ich an curl und schicke das ganze ab. wenn alle requests erfolgreich waren sollen alle dateien in den unterordner backup verschoben werden. - for i in *.ref1; do echo $i dateiname="@${i}" curl -S --connect-timeout 4 -d $dateiname "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx" if [ $? = 0 ] then echo "0" mv $i backup/ else echo "ERROR" fi done das klappt soweit ganz gut. nun hänge ich aber bei der fehlerbehandlung. mit " if [ $? = 0 ]" kann ich prüfen ob der timeout den ich festgelegt hab zuschlägt. es also eine verbindung zum server aufgebaut werden konnte. bei den parametern die ich mitsende handelt es sich z.b um einen hash der wiederum beim webserver gegengeprüft wird. stimmt der nicht liefert dieser mir einen error zurück Ausgabe auf der Konsole: ERROR:ChecksumInvalid <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DT D/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head><title> jetzt dachte ich mir pack ich den curl aufruf in eine if-abfrage und häng hinten dran ein grep welches auf "ERROR" prüft im stil von if [ curl -S --connect-timeout 4 -d $dateiname "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx" | grep "ERROR" = true ] then ... ich weis nun nicht so recht wie die korrekte syntax für so eine abfrage aussehen könnte (ich hab schon mehrere probiert aber immer ohne erfolg), ob das so überhaupt möglich ist oder es vielleicht eine viel bessere lösung gibt ? vielen dank schon mal im vorraus !!!
10. März 201015 j Hallo, if [ curl -S --connect-timeout 4 -d $dateiname "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx" | grep "ERROR" = true ] Ich würde es mal so probieren: if [ `curl -S --connect-timeout 4 -d $dateiname "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx" | grep -q "ERROR"` = 0 ] Hinzugekommen sind die Backticks "`" vor und nach dem Kommando, sowie der Parameter "-q" bei dem grep. Dadurch liefert das grep einen Rückgabewert, je nach dem ob der Suchbegriff gefunden wurde, oder nicht. Also quasi das, was du mit dem "true" abbilden wolltest. LG
11. März 201015 j Habe es gerade mal mit einem anderen Beispiel getestet, scheint wohl so nicht zu funktionieren. Ich mache es meistens so: curl -S --connect-timeout 4 -d $dateiname "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx" | grep -q "ERROR" if [ ${?} -eq 0 ] then .... fi Also im Prinzip das Gleiche wie vorher... MfG AnDi_P
11. März 201015 j hallo AnDi_P, deine 2. Variante klappt genau so wie ich mir das gewünscht hab. was ich noch nich so ganz verstehe is warum: curl -S --connect-timeout 4 -d $dateiname "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx" | grep -q "ERROR" eine 0 zurück liefert wenn er ein "ERROR" findet und eine 1 wenn keins vorhanden ist. müsste das nich genau umgedreht sein? trotzdem erstma vielen dank !!!
11. März 201015 j Hallo, im Allgemeinen ist es so Linux festgelegt, dass ein Rückgabewert = 0 immer erfolgreich bedeutet. Alles != 0 deuted auf einen Fehler hin. Wieso, weshalb, warum? Weiß ich nicht - vielleicht sieht's schöner aus Hier noch mal was zum Lesen dazu: http://openbook.galileocomputing.de/linux/linux_07_shellskript_programmierung_009.htm#mjf5c6e0943531b66a4e40be08312c572c MfG Andi_P
11. März 201015 j Hi Leute, also in der man page zu grep welche ich einfach mal auf einem unserer SLES 10 Server geöffnet habe, steht folgendes unter der Beschreibung des Parameters "-q" für den grep Befehl: -q, --quiet, --silent Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected. Also see the -s or --no-messages option. So wie es beschrieben ist, gibt das grep immer eine NULL zurück. Selbst bei einem Fehler, sofern diese Option genutzt wird. Eine NULL gibt's auch zurück wenn er keinen Sucherfolg hatte. Gruß, -Carmann-
11. März 201015 j Hallo, stimmt, haste Recht, dass das da in der man-page steht Ich hab's gerade aber nochmal explizit nachgetestet, und benutze es bei vielen Scripten, und bei mir gibt "grep -q <Suchbegriff>" immer eine 0 wenn gefunden, und eine 1, wenn nicht. Vielleicht ein Fehler in der man-page? MfG
12. März 201015 j So wie es beschrieben ist, gibt das grep immer eine NULL zurück. Selbst bei einem Fehler, sofern diese Option genutzt wird. Eine NULL gibt's auch zurück wenn er keinen Sucherfolg hatte. Äh, nein, so wie es beschrieben ist, gibt das grep immer eine Null zurück, wenn die Eingabe auf das Suchmuster passt, selbst, wenn dabei Fehler aufgetreten sind. Sorry für die Klugsch...
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.