Você não precisa dizer ao bash para esperar se os processos que você está executando são executados em primeiro plano (o que tudo que você mostra acima faz) - ele irá bloquear esperando que eles saiam.
Depois que eles saem, o bash pode examinar o código de retorno e se comportar de maneira diferente com base nisso. O código de retorno do último subprocesso é armazenado no $? variável:
#!/bin/bash
yum update
if [ $? -ne 0 ]; then
echo "Sorry, yum update had non-zero exit code, why don't we stop here?"
exit 1
fi
yum install libvpx-devel
...
Observe que a convenção Unix é que um código de retorno 0 significa que um processo foi bem-sucedido e um código de retorno de qualquer outra coisa significa que houve problemas. Os problemas podem ser simples (por exemplo, o grep não conseguiu encontrar a string que você estava procurando) ou mais complexo.
Observe também que você pode usar o & & e || operadores para alavancar o código de retorno em um one-liner:
yum update && echo "yum succeeded"
yum update || echo "yum failed"
Resposta a perguntas do @Contax no comentário:
A conexão entre "yum update" e "$?" é que todo programa que é executado possui um código de saída que é retornado ao sistema operacional. Geralmente, o padrão é 0 (sucesso) se o programa não especificar, mas pode ser especificado no programa (por exemplo, a "saída 1" mostrada no script acima está configurando o código de saída desse script para 1. Em C , "return (-1)" na função main () fará com que o programa tenha um código de saída de -1. Bash lê automaticamente este código de saída e o coloca em $? para o seu uso. Pense nisso como parte do encanamento - está atrás das paredes e faz tudo funcionar.
Se você tem muitas tarefas para executar, sim, isso fica tedioso. É por isso que 95% dos scripts de shell lá fora não fazem nenhuma verificação de erros e explodem de forma espetacular quando algo dá errado :) Você teria que criar uma cláusula if [ $? -ne 0 ]; then
para cada tarefa. Se você fosse realmente aventureiro, poderia encontrar uma maneira de transformar suas execuções em um loop e reutilizá-lo, mas isso provavelmente seria mais um problema do que o necessário.
O || A taquigrafia é útil para comprometer a simplicidade do código e a verificação de erros. Como você percebeu, escrever uma cláusula if
para tudo é uma PITA, mas yum update || exit 1
fará com que seu script atenda rapidamente e silenciosamente à falha desse processo. Menos amigável do que tomar o tempo para imprimir informações e limpar, mas é melhor do que continuar a executar comandos que estão fadados ao fracasso porque uma etapa anterior falhou.