O script Bash falha com “erro de sintaxe na expressão condicional”

1

Eu sou novo no bash scripting, e eu só quero fazer uma coisa simples, mas tudo que eu leio online parece não funcionar para mim!

Então eu tenho este script aqui:

  #!/bin/bash
  if [[ $1 = "32"]]
  then
      mv config.h config64.h
      mv config32.h config.h
      mv Makefile Makefile64
      mv Makefile32 Makefile
      echo "READY FOR 32 BITS!"
  elif [[ $2 = "64" ]]
  then
      mv config.h config32.h
      mv config64.h config.h
      mv Makefile Makefile32
      mv Makefile64 Makefile
      echo "READY FOR 64 BITS!"
  fi

e eu recebo o erro:

./switch-bits.sh: line 3: syntax error in conditional expression
./switch-bits.sh: line 4: syntax error near 'then'
./switch-bits.sh: line 4: 'then'

Então minhas mãos são jogadas no ar aqui ... o que está errado?

    
por Ethan 23.04.2013 / 07:23

2 respostas

8

Para elaborar um pouco sobre o meu comentário, sugiro alterar seu script da seguinte forma:

#!/bin/bash
if [[ $1 = "32" ]]
then
  rm config.h
  ln -s config32.h config.h
  rm Makefile
  ln -s Makefile32 Makefile
  echo "READY FOR 32 BITS!"
elif [[ $1 = "64" ]]
then
  rm config.h
  ln -s config64.h config.h
  rm Makefile
  ln -s Makefile64 Makefile
  echo "READY FOR 64 BITS!"
fi

E uma versão mais curta (? inteligente):

#!/bin/bash
rm config.h
ln -s config$1.h config.h
rm Makefile
ln -s Makefile$1 Makefile
echo "READY FOR $1 BITS!"

Observação - seria uma boa ideia, se você fizesse a versão mais curta, incluir alguma verificação de erro - por exemplo, certifique-se de que a entrada seja "32" ou "64" e não outra. Vou deixar isso para você ...

    
por 23.04.2013 / 08:17
7

você precisa de um espaço entre "32" e ]]

    
por 23.04.2013 / 07:43