Сравнивая две строки в Bash


13

Я хотел бы сделать скрипт, который удаляет каталог rmdirпосле подтверждения паролем, используя readдля установки переменной.

Пока у меня есть это:

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

Итак, у меня есть -xпопытка отладки, но каждый раз, когда сценарий либо не в состоянии эхо (если я ввел пароль неверно), либо он не удалит нужный каталог.

Если у кого-то есть модифицируемый скрипт, который я мог бы использовать, или если бы вы могли указать на проблемы с текущим скриптом, это было бы здорово.

Ответы:


17

Правильный способ сравнения этих двух строк ( S1и S2) if:

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

Не скупитесь на использование пробелов в этом случае.

Смотрите: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html


TLDP не является подлинным сайтом, так как в нем много несоответствий и ошибок. Я бы посоветовал, чтобы мы не использовали его в качестве ссылки.
codeforester

6

В скриптах bash вам нужно сравнить две переменные с методом ниже.

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

Пробелы важны


4

Вы также можете использовать GNU test, например:

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

В вашем контексте это:

test "$S1" = "$S2" && rmdir -v /home/william/test
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.