web-dev-qa-db-fra.com

Erreur "commande introuvable" lors de la comparaison de deux chaînes dans Bash

Mon script entier est actuellement ceci:

#!/bin/sh   
clear;   
blanko="";   
# Dummy-Variablen
variable=Testvariable;   
if [[$variable == $blanko]];
then   
  echo "Nichts da!"   
else   
  echo $variable   
fi

et si j'entre

TestSelect.sh

je reçois

/usr/bin/TestSelect.sh: line 6: [[Testvariable: command not found   
Testvariable

comment puis-je réparer cela?

50
EpsilonAlpha

C'est un problème:

if [[$variable == $blanko]];

Les espaces sont requis entre crochets, utilisez-le comme ceci:

[[ "$variable" == "$blanko" ]] && echo "Nichts da!" || echo "$variable"
97
anubhava

Sur une note connexe, des espaces sont nécessaires autour de [ ] ainsi que:

if [ "$variable" = "$blanko" ]; then
  # more code here
fi

Notez que les variables doivent être placées entre guillemets doubles à l'intérieur de [ ] pour empêcher le fractionnement et la suppression de Word. Les guillemets doubles sont également utiles lorsque l'une des variables comparées n'est pas définie. Sinon, Shell générera une erreur de syntaxe.

Regardez le post suivant pour comprendre pourquoi nous avons besoin d'espaces autour de [ ]:

Un autre article connexe qui parle d'autres éléments de syntaxe qui ont également besoin d'espaces:

Enfin, cet article parle de la différence entre [[ ]] et [ ]:


En relation:

8
codeforester

Utilisez simplement #!/bin/bash En haut du script si vous utilisez un script bash tel que: if [[ $partition == "/dev/sda2" ]]; then Pour comparer une chaîne et exécuter le script avec ./scriptname.sh Ou bash scriptname.sh

0
ankit