Comparando duas strings no Bash

13

Gostaria de criar um script que exclua um diretório rmdirdepois de confirmar com uma senha usando readpara definir a variável.

Até agora eu tenho isso:

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

Então, eu tenho -xque tentar depurá-lo, mas toda vez que o script falha ao eco (se eu colocar a senha errada) ou ele não remove o diretório necessário.

Se alguém tiver um script modificável que eu possa usar ou se você puder apontar os problemas com o script atual, isso seria ótimo.

Desert_foxhole
fonte

Respostas:

17

A maneira correta de comparar essas duas strings ( S1e S2) usando ifé:

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

Não seja mesquinho nos espaços de uso neste caso.

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

Radu Rădeanu
fonte
O TLDP não é um site autêntico, pois possui muitas inconsistências e erros. Eu recomendaria que não o usássemos como referência.
precisa saber é o seguinte
6

No script bash, você precisa comparar duas variáveis ​​com o método abaixo.

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

Espaços são importantes

Mansur Ali
fonte
4

Você também pode usar o GNU test, por exemplo:

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

No seu contexto, é:

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