Erreur de script Linux lors de la comparaison de chaînes

J’essaie de prendre deux entrées de chaîne et de vérifier si elles sont égales ou pas, sinon égales, alors indiquez la longueur du caractère. Je ne suis pas trouvé d’erreur après avoir tapé deux chaînes, quelqu’un peut-il dire ce que je fais mal? j’ai essayé d’utiliser:

#!/bin/bash while true; do echo "Please Enter two name to compare" read name_1 name_2 1=${#name_1} 2=${#name_2} if [ "$name_1" -eq "$name_2" ] then echo "$name_1 and $name_2 are equal" else echo "$name_1 and $name_2 are not equal" fi echo "Ssortingng 1 length is $(1)" echo "Ssortingng 2 length is $(2)" done 

Points:

  • Une variable définie par l’utilisateur dans bash ne peut pas commencer par un chiffre et ne peut évidemment pas être qu’un chiffre

  • -eq fait la comparaison arithmétique; comme vous comparez des chaînes utilisez = (POSIX) ou ==

Celui-ci travaillera exactement comme prévu:

 #!/bin/bash while true; do echo "Please Enter two name to compare" read name_1 name_2 one=${#name_1} two=${#name_2} if [ "$name_1" = "$name_2" ] then echo "$name_1 and $name_2 are equal" else echo "$name_1 and $name_2 are not equal" fi echo "Ssortingng 1 length is $one" echo "Ssortingng 2 length is $two" done 

Essayez ce qui suit J’ai utilisé [[ ]] autour de votre if et changé les variables de 1 et 2 en x et y :

 #!/bin/bash while true; do echo "Please Enter two name to compare" read name_1 name_2 x=${#name_1} y=${#name_2} if [[ "$name_1" == "$name_2" ]] then echo "$name_1 and $name_2 are equal" else echo "$name_1 and $name_2 are not equal" fi echo "Ssortingng 1 length is $x" echo "Ssortingng 2 length is $y" done exit