Vergleichen von zwei Zeichenfolgen in Bash

13

Ich möchte ein Skript erstellen, das ein Verzeichnis mit löscht, rmdirnachdem ich mit ein Passwort bestätigt habe read, um die Variable zu setzen.

Bisher habe ich das:

#!/bin/bash -x
echo "Password:"
read -t 30 S1
    S2='55555'
if [ $S1=$S2 ]; then
    rmdir /home/william/test
else
    echo "fail"
sleep 10
fi

Also muss ich -xversuchen, es zu debuggen, aber jedes Mal, wenn das Skript entweder nicht funktioniert (wenn ich das Passwort falsch eingebe) oder das benötigte Verzeichnis nicht entfernt wird.

Wenn jemand ein änderbares Skript hat, das ich verwenden könnte, oder wenn Sie auf die Probleme mit dem aktuellen Skript hinweisen könnten, wäre das großartig.

Desert_foxhole
quelle

Antworten:

17

Der richtige Weg, diese beiden Zeichenfolgen ( S1und S2) zu vergleichen , ifist:

if [ "$S1" = "$S2" ]

Seien Sie in diesem Fall nicht geizig in gebrauchten Räumen.

Siehe: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

Radu Rădeanu
quelle
TLDP ist keine authentische Site, da sie viele Inkonsistenzen und Fehler aufweist. Ich würde raten, dass wir es nicht als Referenz verwenden.
Codeforester
6

In Bash-Skripten müssen Sie zwei Variablen mit der folgenden Methode vergleichen.

if [ "var1" != "var2" ]; then
  Do something
fi;

Leerzeichen sind wichtig

Mansur Ali
quelle
4

Sie können auch GNU verwenden test, zum Beispiel:

test s1 = s2 && echo Equal || echo Not equal

In Ihrem Kontext ist es:

test "$S1" = "$S2" && rmdir -v /home/william/test
Kenorb
quelle