Existem muitas maneiras de fazer isso.
-
Use os recursos internos do shell. Comandos (e funções) possuem valores de saída. Normalmente, um valor de saída de 0 significa que o comando foi bem-sucedido e um valor > 0 significa que falhou. Isso é verificado pelo shell quando você usa os operadores
||
ou&&
. Então, para rodar um comando apenas se o anterior foi bem sucedido, você usaria&&
, ro rodaria ele a menos que o anterior fosse bem sucedido, você usa||
. Por exemplo:$ foo The last command was succesful echo 'foo' && echo "The last command was succesful"
Se você usar um comando que não existe, obviamente falhará:
$ echooo 'foo' && echo "The last command was succesful" echooo: command not found
Observe que a segunda mensagem não é impressa. Se você usa
||
:$ echooo 'foo' || echo "The last command failed" echooo: command not found The last command failed
Você pode combinar isso na sua função de shell:
function isitthere { [ -f thefile ] } isitthere && echo "The file exists" || echo "the file does not exist"
O operador
test
(também conhecido como[ ]
) retorna um valor de saída de 0 em sucesso e 1 em falha. Isso significa que sua função pode ser simplificada para o acima. -
Use o comando
return
. Isso é exatamente o mesmo que o exemplo acima, estou simplesmente declarando isso mais explicitamente. Ele também permite que você retorne valores mais complexos para diferentes casos de falha.function isitthere { if [ -f <thefile> ]; then return 0 else return 1 fi } if [ $(isitthere) ]; then echo "Your program is properly installed" else echo "Your program isn't properly installed. fi
Eu usei a mesma sintaxe que você para ilustrar, mas isso pode ser encurtado para
isitthere && echo "Your program is properly installed" || echo "Your program isn't properly installed."
-
Faça sua função imprimir algo na saída padrão e aja de acordo.
function isitthere { [ -f thefile ] && echo yes || echo no } if [ $(isitthere) = "yes" ]; then echo "Your program is properly installed" else echo "Your program isn't properly installed." fi
Neste exemplo, estamos usando a saída padrão da função e não seu valor de retorno. Para capturar a saída de um comando (ou função), você precisa usar substituição de comando . Isso permite que você execute um comando e salve a saída como uma variável. Por exemplo
$ foo=$(echo bar) $ echo $foo bar
Assim, o teste
if [ $(isitthere) = "yes" ]
verifica se a saída da função foiyes
e age de acordo.
Observe que usei [ -f thefile ] && echo yes || echo no
e o mais complexo
if [ -f <thefile> ]; then
return 0
else
return 1
fi
Os dois são basicamente equivalentes, eu usei os dois apenas para ilustrar isso. Você pode usar o que preferir.