Existe alguma forma de verificar se existe um erro na execução de um comando?
Exemplo :
test1=`sed -i "/:@/c connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase" $search`
valid $test1
function valid () {
if $test -eq 1; then
echo "OK"
else echo "ERROR"
fi
}
Eu já tentei fazer isso, mas parece que está... 39; não está funcionando. Eu não't como fazer isso.
O valor de retorno é armazenado em $?
. 0 indica sucesso, outros indicam erro.
some_command
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
Como qualquer outro valor textual, você pode armazená-lo em uma variável para comparação futura:
some_command
retval=$?
do_something $retval
if [ $retval -ne 0 ]; then
echo "Return code was not zero but $retval"
fi
Para possíveis operadores de comparação, veja man test
.
Se você só precisa saber se o comando foi bem sucedido ou falhou, don'não se preocupe em testar $?
, apenas teste o comando diretamente. Por exemplo:
if some_command; then
printf 'some_command succeeded\n'
else
printf 'some_command failed\n'
fi
E atribuir a saída a uma variável não altera o valor de retorno (bem, a menos que ela se comporte de forma diferente quando stdout é't um terminal, é claro).
if output=$(some_command); then
printf 'some_command succeded, the output was «%s»\n' "$output"
fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals explica o 'se' com mais detalhes.
$? deve conter o estado de saída do comando anterior, que deve ser zero para nenhum erro.
Então, algo do género;
cd /nonexistant
if [ $? -ne 0 ]
then
echo failed
else
echo success!
fi
para a maioria dos casos, it's é mais fácil de usar o && construir comandos em cadeia que precisam depender uns dos outros. Então cd /não existe && echo success!
não echo success porque o comando quebra antes do &&. O corolário disto é |||, onde cd /nonexistant || echo fail
falharia* echo porque o cd falhou. (isto se torna útil se você usar algo como ||exit, que terminará o script se o comando anterior falhar).