Seu script é claramente um script bash , mas você está usando o sh .
Em vez de usar explicitamente sh para iniciar o script,
- Use
bashou - Torne o script executável e adicione uma
#!-line apropriada na primeira linha que aponta para o intérpretebashe 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
diffpara fazer uma comparação de string. Basta fazerif [ "$variable1" != "$variable2" ]para testar a desigualdade. - Use
printfem vez deechopara 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.