Zum Inhalt springen

String Problem in Shell-Skript


Empfohlene Beiträge

Geschrieben

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

Geschrieben
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...

Geschrieben (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 von Lalelu
Geschrieben

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...

Geschrieben

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.

Geschrieben

: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 :)

Geschrieben

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ß

Geschrieben

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 :)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...