Warum ist mein Bash String Vergleich zweier identischer Strings immer falsch?

8

Ich versuche, ein einfaches kleines Skript zu schreiben, um eine 3G-Verbindung abzufragen, und wenn die Verbindung unterbrochen wurde, initiiere eine erneute Verbindung.

Mein Problem besteht darin, die Ausgabe des Befehls zu überprüfen - zwei scheinbar gleiche Strings werden nicht als gleich bewertet. Ich bin sicher, dass hier irgendwo ein Noob-Fehler ist!

%Vor%

Die Ausgabe beim Ausführen:

%Vor%

Wenn ./test_3g.sh | cat -A ausgeführt wird:

%Vor%     
jozzas 29.08.2011, 03:19
quelle

3 Antworten

25

Sie müssen Leerzeichen um Operatoren setzen:

%Vor%

Ohne Leerzeichen endet die Eingabe mit einer einzelnen Zeichenfolge, die "$a!=$b" entspricht. Und wenn nur ein String getestet wird, wird "true" zurückgegeben, wenn dieser String nicht leer ist ...

    
sth 29.08.2011, 03:42
quelle
5

Verwenden Sie case/esac . Wenn Sie sich nicht mit den feinen Nuancen von if/else herumschlagen müssen

%Vor%     
ghostdog74 29.08.2011 03:45
quelle
0
___ qstntxt ___

Ich versuche, ein einfaches kleines Skript zu schreiben, um eine 3G-Verbindung abzufragen, und wenn die Verbindung unterbrochen wurde, initiiere eine erneute Verbindung.

Mein Problem besteht darin, die Ausgabe des Befehls zu überprüfen - zwei scheinbar gleiche Strings werden nicht als gleich bewertet. Ich bin sicher, dass hier irgendwo ein Noob-Fehler ist!

%Vor%

Die Ausgabe beim Ausführen:

%Vor%

Wenn %code% ausgeführt wird:

%Vor%     
___ tag123bash ___ Für Fragen zu Skripten, die für die Bash-Befehlsshell geschrieben wurden. Für Shell-Skripte mit Fehlern, überprüfen Sie diese bitte mit dem Shellcheck-Programm (oder im web-Shellcheck-Server unter https://shellcheck.net), bevor Sie hier posten. Fragen zur interaktiven Nutzung von Bash sind bei Super Usern eher Thema als bei Stack Overflow. ___ tag123shell ___ Der Begriff "Shell" bezieht sich auf eine allgemeine Klasse textbasierter interaktiver Befehlsinterpreter, die meist mit den Unix- und Linux-Betriebssystemen verknüpft sind. Bei Fragen zum Shell-Scripting verwenden Sie bitte ein spezifischeres Tag wie 'bash', 'powershell' oder 'ksh'. Ohne ein spezifisches Tag sollte eine portable (POSIX-konforme) Lösung angenommen werden, obwohl zusätzlich 'posix' oder 'sh' zu bevorzugen ist. ___ tag123logicaloperators ___ Logische Operatoren sind Symbole, die bei der Auswertung boolescher Ausdrücke helfen. Diese sind in fast jeder Programmiersprache zu finden, die Boolean unterstützt. Häufige Beispiele sind && (AND), || (ODER), ! (NOT), == ([Wert] gleich), === ([Wert und Typ] gleich),> = (Größer als oder gleich), <= (Kleiner oder gleich),> (Größer als) und <(weniger als) ___ answer7225871 ___

Verwenden Sie %code% . Wenn Sie sich nicht mit den feinen Nuancen von %code% herumschlagen müssen

%Vor%     
___ answer7225851 ___

Sie müssen Leerzeichen um Operatoren setzen:

%Vor%

Ohne Leerzeichen endet die Eingabe mit einer einzelnen Zeichenfolge, die %code% entspricht. Und wenn nur ein String getestet wird, wird "true" zurückgegeben, wenn dieser String nicht leer ist ...

    
___ qstnhdr ___ Warum ist mein Bash String Vergleich zweier identischer Strings immer falsch? ___
Slava Semushin 29.08.2011 03:29
quelle

Tags und Links