Porównywanie dwóch ciągów w Bash

13

Chciałbym stworzyć skrypt, który usuwa katalog rmdirpo potwierdzeniu hasłem przy użyciu readdo ustawienia zmiennej.

Do tej pory mam to:

#!/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

Muszę więc -xspróbować go debugować, ale za każdym razem skrypt nie echo (jeśli źle wpisuję hasło) lub nie usunie potrzebnego katalogu.

Jeśli ktoś ma modyfikowalny skrypt, którego mógłbym użyć lub mógłbyś wskazać problemy z bieżącym skryptem, byłoby świetnie.

Desert_foxhole
źródło

Odpowiedzi:

17

Właściwy sposób na porównanie tych dwóch ciągów ( S1i S2) za pomocą ifto:

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

W tym przypadku nie bądź skąpy w przestrzeniach użytkowych.

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

Radu Rădeanu
źródło
TLDP nie jest autentyczną witryną, ponieważ zawiera wiele niespójności i błędów. Radziłbym, aby nie używać go jako odniesienia.
codeforester
6

W skryptach bash musisz porównać dwie zmienne z poniższą metodą.

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

Spacje są ważne

Mansur Ali
źródło
4

Możesz także użyć GNU test, na przykład:

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

W twoim kontekście jest to:

test "$S1" = "$S2" && rmdir -v /home/william/test
kenorb
źródło