Gast ESP Geschrieben 31. Juli 2010 Geschrieben 31. Juli 2010 Hallo zusammen, ich hätte eine Frage bezüglich eine Shell-Skripts. Ich möchte testen, ob eine URL aufgerufen werden kann, sprich die Seite online ist, und das führt dann zu weiteren Sachen, die aber nicht das Problem sind. Mein Problem ist, dass ich innerhalb des Skriptes die Stringvariable verliere, sobald es in Verbindung mit einer anderen Ausgabe steht. Habe ein paar Tests gemacht bezüglich Anführungszeichen etc, aber ich komm nicht auf den Fehler: #!/bin/bash URL_CHECK=`curl -Is "http://www.google.de" | grep HTTP | sed 's/.*\(...\)/\1/'` echo $? echo "$URL_CHECK" test "$URL_CHECK" == "OK" echo $? echo $URL_CHECK echo $URL_CHECK" ist Test" echo "$URL_CHECK ist Test" das führt zu der Ausgabe: 0 OK 1 OK ist Test ist Test Also jedesmal, wenn ich das OK wirklich benötige zur Ausgabe oder zum späteren Vergleich in der if-bedingung = "OK" ist die Variable leer. Danke im Voraus Zitieren
Lalelu Geschrieben 31. Juli 2010 Geschrieben 31. Juli 2010 echo "${URL_CHECK} ist Test" ich würds mal so probieren... Zitieren
Gast ESP Geschrieben 31. Juli 2010 Geschrieben 31. Juli 2010 echo "${URL_CHECK} ist Test" ich würds mal so probieren... Leider keine Veränderung Hab noch vergessen zu erwähnen, dass ich es auf openSuSE 11.3 laufen lasse.. wobei das (hoffentlich) keinen Unterschied macht... Zitieren
Lalelu Geschrieben 31. Juli 2010 Geschrieben 31. Juli 2010 (bearbeitet) interessantes Problem..offensichtlich überschreibt die BASH das ok mit der zweiten ausgabe..nach einigen (vielen) versuchen...probier es mal hiermit echo -e "${URL_CHECK}\t ist Test" aber das heisst ja nicht das deine variable leer ist , sondern dass echo sie in der ausgabe überschreibt...wenn ich es richtig verstehe. Bearbeitet 31. Juli 2010 von Lalelu Zitieren
Gast ESP Geschrieben 31. Juli 2010 Geschrieben 31. Juli 2010 hey erstmal Danke für deine Mühe, die Ausgabe funktioniert so bei mir auch, wenn auch mit dem Tab durch \t, mein größeres Problem ist aber, dass ich bei test "$URL_CHECK" == "OK" $? als Rückgabewert 1 bekomme, auch mit einer Anpassung. Ich hab schon ein paar Skripte dieser Art geschrieben, jedoch waren die Ergebnisse immer Zahlen statt Strings...und damit funktionierte es auch immer einwandfrei... Zitieren
Lalelu Geschrieben 31. Juli 2010 Geschrieben 31. Juli 2010 test $URL_CHECK=="OK" habs raus...es dürfen keine leerzeichen dazwischen sein,dann gehts... gruss Zitieren
Gast ESP Geschrieben 31. Juli 2010 Geschrieben 31. Juli 2010 Hey, das hatte ich auch schon, aber wie ich gelesen habe, müssen die Operatoren von Leerzeichen umgeben sein, sonst funktioniert das Ganze nicht, kannst es auch daran testen, indem du eine URL untersuchst, die es definitiv nicht gibt oder einfach eine falsche Bedingung festlegst wie zb: if [ "TEST"=="OK" ] ; then echo "RICHTIG" else echo "FALSCH" fi Die Ausgabe ist RICHTIG, obwohl das nicht korrekt ist *seufz* Lustig ist auch, dass ein echo "blabla ${variable}" korrekt ausgegeben wird, ein echo "blabla ${variable} blabla" aber nicht... Hab auch noch weiter getestet und glaube, dass es an meiner curl-befehl-ausgabe-als-variable-deklarieren-sache liegt... wenn ich die Variable als String angebe funktioniert alles. URL_CHECK="OK" test "$URL_CHECK" == "OK" echo $? Ausgabe ist 0, also alles ok. Zitieren
Gast ESP Geschrieben 1. August 2010 Geschrieben 1. August 2010 :marine ich habs jetzt... was für ein Spaß... URL_CHECK=`curl -sI "http://www.google.de" | sed -n '1p' | sed 's/.*\(...\)/\1/'` URL=${URL_CHECK:0:2} echo "\"${URL}\"" test "$URL" == "OK" echo $? Ausgabe ist "OK" 0 Also es lag wirklich am curl-Befehl, der String war einfach nicht korrekt, konnte man mit \"$variable\" erkennen, weil nur das erste " mit ausgegeben wurde. Jetzt läufts folgendermaßen ab: curl -sI "http://www.google.de" --> gibt die Infos über die Seite aus, wenn erfolgreich gibts ne mehrzeilige Ausgabe, ansonsten gar nichts / error sed -n '1p' --> gibt die erste Zeile der Ausgabe aus sed 's/.*\(...\)/\1/' --> gibt die letzten beiden Zeichen der Zeile aus, wenn die Website erreichbar ist, dann kommt OK als Ergebnis URL=${URL_CHECK:0:2} --> das macht im Endeffekt nichts anderes, als die ersten beiden Stellen in eine neue Variable zu schreiben und diesmal ist es ein korrekter "String" und die test-Bedingung läuft. Danke für deine Hilfe und schönen Sonntag Zitieren
Lalelu Geschrieben 1. August 2010 Geschrieben 1. August 2010 cool.. URL=${URL_CHECK:0:2} wie heisst denn der Vorgang? :0:2 ..damit ich das mal nachlesen kann.. gruss Zitieren
Gast ESP Geschrieben 1. August 2010 Geschrieben 1. August 2010 wie der Vorgang exakt heißt weiß ich nicht, es ist eine normale Stringmanipulation nach dem Schema: ${string:Startposition:Länge} Gibt vom String ab der Startposition die Anzahl Zeichen aus, die bei Länge angegeben ist. Gruß Zitieren
schepp Geschrieben 2. August 2010 Geschrieben 2. August 2010 ESP: gewöhn dir an die Backticks wegzulassen bei URL_CHECK=`curl -sI "http://www.google.de" | sed -n '1p' | sed 's/.*\(...\)/\1/'` und verwende stattdessen lieber URL_CHECK=$(curl -sI "http://www.google.de" | sed -n '1p' | sed 's/.*\(...\)/\1/') minimiert nochmal eine beliebte Fehlerquelle Zitieren
Gast ESP Geschrieben 2. August 2010 Geschrieben 2. August 2010 @schepp vielen Dank, diese Schreibweise kannte ich noch nicht Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.