web-dev-qa-db-fra.com

Comparer deux chaînes dans Bash

Je voudrais créer un script qui supprime un répertoire avec rmdir après confirmation avec un mot de passe en utilisant read pour définir la variable.

Jusqu'ici 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 -x pour essayer de le déboguer, mais chaque fois que le script ne parvient pas à écho (si je mets le mot de passe incorrect) ou ne supprime pas le répertoire nécessaire.

Si quelqu'un a un script modifiable que je pourrais utiliser ou si vous pouvez signaler les problèmes liés au script actuel, ce serait formidable.

13
Desert_foxhole

La bonne façon de comparer ces deux chaînes (S1 et S2) en utilisant if est la suivante:

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

17
Radu Rădeanu

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

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

Les espaces sont importants

6
Mansur Ali

Vous pouvez également utiliser GNU testname__, par exemple:

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

Dans votre contexte, c'est:

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