Se você quiser testar esse argumento de função equivalente a alguma string, você deve usar a construção if [ "$x" == "string" ]
, então seu código será parecido com:
test () {
if [ "$1" == "toto" ] then
return 1
elif [ "$1" == "tata" ] then
return 4
fi
}
main () {
test "tata"
if [ $? -ne 1 ] then
echo "somecode"
fi
}
main "$@"
E você pode usar test
name para a função. Se você quiser chamar builtin test
, use builtin test
construct.
E tome cuidado com =
(atribuição) e ==
(comparação). Dentro do teste [
e ]
o operador =
funciona como ==
e testa a igualdade da cadeia (não os números).
set -o errexit
sai imediatamente após o comando retornar diferente de zero (sem êxito). Seu ninja
retorna 1
(que é diferente de zero) e sai.
Seu código sem testes não está funcionando porque if
declaração tenta executar instruções e determinar o estado de saída do comando: se o estado de saída for zero (sucesso), execute instruções após then
till elif
de fi
.