Comparaison de deux chaînes dans Bash

13

Je voudrais faire un script qui supprime un répertoire avec rmdiraprès avoir confirmé avec un mot de passe en utilisant readpour définir la variable.

Jusqu'à présent, j'ai ceci:

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

Donc, j'ai le -xpour essayer de le déboguer mais à chaque fois que le script échoue (si je mets le mot de passe de manière incorrecte) ou qu'il ne supprime pas le répertoire nécessaire.

Si quelqu'un a un script modifiable que je pourrais utiliser ou si vous pourriez signaler les problèmes avec le script actuel, ce serait génial.

Desert_foxhole
la source

Réponses:

17

La bonne façon de comparer ces deux chaînes ( S1et S2) en utilisant ifest:

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

Ne soyez pas avare dans les espaces d'utilisation dans ce cas.

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

Radu Rădeanu
la source
TLDP n'est pas un site authentique car il présente de nombreuses incohérences et erreurs. Je conseillerais de ne pas l'utiliser comme référence.
codeforester
6

Dans les scripts bash, vous devez comparer deux variables avec la méthode ci-dessous.

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

Les espaces sont importants

Mansur Ali
la source
4

Vous pouvez également utiliser GNU test, par exemple:

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

Dans votre contexte, c'est:

test "$S1" = "$S2" && rmdir -v /home/william/test
Kenorb
la source