Comparar dos cadenas en Bash

13

Me gustaría hacer una secuencia de comandos que elimine un directorio rmdirdespués de confirmar con una contraseña readpara configurar la variable.

Hasta ahora tengo esto:

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

Entonces, tengo -xque tratar de depurarlo, pero cada vez que el script falla al hacer eco (si pongo la contraseña incorrecta) o no elimina el directorio necesario.

Si alguien tiene un script modificable que yo podría usar o si usted pudiera señalar los problemas con el script actual, sería genial.

Desert_foxhole
fuente

Respuestas:

17

La forma correcta de comparar esas dos cadenas ( S1y S2) usando ifes:

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

No seas tacaño en espacios de uso en este caso.

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

Radu Rădeanu
fuente
TLDP no es un sitio auténtico ya que tiene muchas inconsistencias y errores. Aconsejaría que no lo usemos como referencia.
codeforester
6

En las secuencias de comandos bash, debe comparar dos variables con el siguiente método.

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

Los espacios son importantes

Mansur Ali
fuente
4

También puede usar GNU test, por ejemplo:

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

En su contexto, es:

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