Порівняння двох рядків у 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 не є автентичним сайтом, оскільки в ньому є багато невідповідностей та помилок. Я б радив, щоб ми не використовували це як посилання.
кодовий ліс

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.