Existem dois problemas aqui. Primeiro, enquanto você tem uma linha de chamada shebang line , você está executando o script como sh script.sh
. A linha shebang já especifica um interpretador para este script. Então, basta tornar o script executável:
chmod a+x ./test.sh
E, em seguida, execute-o:
./test.sh
Como alternativa, execute-o com o bash explicitamente:
bash ./test.sh
Isso fará com que seja executado com bash
em vez de sh
, que é um shell mais limitado e não entende ==
. O que nos leva ao segundo problema e por que isso falha. Estranhamente, você quer eq
ou =
, não ==
. O operador que testa a igualdade numérica em scripts shell POSIX ( sh
é um shell compatível com POSIX) é -eq
, enquanto o que testa a igualdade string é =
e ==
não é uma coisa.
Portanto, se você quiser que seu script seja executado por sh
, altere-o para:
if [ 1 = 1 ]; then
echo "Something"
fi
Que verifica se a string 1
é igual à string 1
, ou para comparar numericamente, use:
if [ 1 -eq 1 ]; then
echo "Something"
fi
Além disso, você tem outro problema. Só posso reproduzir o erro específico que você recebe em dash
se eu adicionar um \r
após o then
. Esse é um problema clássico ao se mover entre o Windows e o Linux. Enquanto o Linux usa \n
como caractere de fim de linha, o Windows termina suas linhas com \r\n
. Esse caractere \r
não é visível para o usuário, mas está lá e confunde o script. Então, você pode removê-lo com:
sed -i 's/\r//' ./test.sh
E, no futuro, use um editor de texto adequado para escrever seus scripts. Qualquer um que funcione no sistema WSL, ou um que possa pelo menos ser configurado para não adicionar \r
às extremidades de suas linhas.