Membandingkan dua string dalam Bash

13

Saya ingin membuat skrip yang menghapus direktori dengan rmdirsetelah mengonfirmasi menggunakan kata sandi readuntuk mengatur variabel.

Sejauh ini saya punya ini:

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

Jadi, saya punya -xuntuk mencoba men-debug itu tetapi setiap kali skrip gagal untuk echo (jika saya salah memasukkan kata sandi) atau tidak akan menghapus direktori yang diperlukan.

Jika seseorang memiliki skrip yang dapat dimodifikasi yang dapat saya gunakan atau jika Anda dapat menunjukkan masalah dengan skrip saat ini, akan lebih bagus.

Desert_foxhole
sumber

Jawaban:

17

Cara yang tepat untuk membandingkan kedua string ( S1dan S2) menggunakan ifadalah:

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

Jangan pelit dalam menggunakan ruang dalam hal ini.

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

Radu Rădeanu
sumber
TLDP bukan situs otentik karena memiliki banyak inkonsistensi dan kesalahan. Saya menyarankan agar kita tidak menggunakannya sebagai referensi.
codeforester
6

Dalam bash scripting Anda perlu membandingkan dua variabel dengan metode di bawah ini.

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

Spasi itu penting

Mansur Ali
sumber
4

Anda juga dapat menggunakan GNU test, misalnya:

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

Dalam konteks Anda, itu adalah:

test "$S1" = "$S2" && rmdir -v /home/william/test
kenorb
sumber