Seu script é claramente um script bash
, mas você está usando o sh
.
Em vez de usar explicitamente sh
para iniciar o script,
- Use
bash
ou - Torne o script executável e adicione uma
#!
-line apropriada na primeira linha que aponta para o intérpretebash
e execute o script com./cli-unit.sh
.
Não é possível esperar que o sh
shell entenda a sintaxe do shell bash
-específico.
Eu tenho mais alguns problemas com algumas das coisas que você mostra no script:
- Use nomes de variáveis de shell minúsculas para que eles não entrem em conflito acidentalmente com as variáveis de ambiente do sistema. No código, você define
SHELL
, que geralmente é o caminho para o interpretador de shell atual. - Não use
diff
para fazer uma comparação de string. Basta fazerif [ "$variable1" != "$variable2" ]
para testar a desigualdade. - Use
printf
em vez deecho
para gerar dados variáveis (consulte " Por que o printf é melhor que o eco? ").
Endereçando o diff
:
if [ "$FOUND" != "$EXPECTED" ]; then
# code as before
return 1
fi
# code as before
return 0
Dentro da ramificação if
, você ainda pode usar diff
para mostrar a diferença (especialmente se outro script ou usuário estiver esperando esse tipo de saída desta roteiro). Outra opção seria fazer
if [ "$FOUND" != "$EXPECTED" ]; then
# $FOUND is different from $EXPECTED
printf 'FAIL (%s): Found: %s\n' "$TITLE" "$FOUND"
printf 'FAIL (%s): Expected: %s\n' "$TITLE" "$EXPECTED"
# other code here
fi
# rest of script
ou algo similar.