A abordagem mais simples é fazer com que seu script continue somente se apt-get
sair corretamente. Por exemplo:
sudo apt-get install BadPackageName &&
## Rest of the script goes here, it will only run
## if the previous command was succesful
Como alternativa, saia se alguma etapa tiver falhado:
sudo apt-get install BadPackageName || echo "Installation failed" && exit
Isso daria a seguinte saída:
terdon@oregano ~ $ foo.sh
[sudo] password for terdon:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package BadPackageName
Installation failed
Isso está tirando vantagem de um recurso básico do bash e da maioria (se não de todos) shells:
-
&&
: continue somente se o comando anterior foi bem-sucedido (teve um status de saída de 0) -
||
: continue apenas se o comando anterior falhou (teve um status de saída de não 0)
É o equivalente a escrever algo assim:
#!/usr/bin/env bash
sudo apt-get install at
## The exit status of the last command run is
## saved automatically in the special variable $?.
## Therefore, testing if its value is 0, is testing
## whether the last command ran correctly.
if [[ $? > 0 ]]
then
echo "The command failed, exiting."
exit
else
echo "The command ran succesfuly, continuing with script."
fi
Observe que, se um pacote já estiver instalado, apt-get
será executado com êxito e o status de saída será 0.