How can I check for apt-get errors in a bash script?

The simplest approach is to have your script continue only if apt-get exits correctly. For example:

sudo apt-get install BadPackageName && 
## Rest of the script goes here, it will only run
## if the previous command was succesful

Alternatively, exit if any steps failed:

sudo apt-get install BadPackageName || echo "Installation failed" && exit

This would give the following output:

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

This is taking advantage of a basic feature of bash and most (if not all) shells:

  • && : continue only if the previous command succeeded (had an exit status of 0)
  • ||: continue only if the previous command failed (had an exit status of not 0)

It is the equivalent of writing something like this:

#!/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

Note that if a package is already installed, apt-get will run successfully, and the exit status will be 0.