Monday, April 29, 2024
 Popular · Latest · Hot · Upcoming
15
rated 0 times [  15] [ 0]  / answers: 1 / hits: 18154  / 2 Years ago, sun, december 26, 2021, 3:23:21

I am writing a bash script to install software and update Ubuntu 12.04. I would like the script to be able to check for apt-get errors especially during apt-get update so that I can include corrective commands or exit the script with a message. How can I have my bash script check for these types of errors?



Edit March 21st:
Thank you terdon for the providing just the information I needed! Here is the script I created with a combination of your suggestions to check for updates and recheck when errors occur and then report back. I will be adding this to a longer script that I am using to customize new Ubuntu installations.




#!/bin/bash

apt-get update

if [ $? != 0 ];
then
echo "That update didn't work out so well. Trying some fancy stuff..."
sleep 3
rm -rf /var/lib/apt/lists/* -vf
apt-get update -f || echo "The errors have overwhelmed us, bro." && exit
fi

echo "You are all updated now, bro!"

More From » apt

 Answers
0

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.


[#26416] Sunday, December 26, 2021, 2 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
tionverflow

Total Points: 500
Total Questions: 115
Total Answers: 120

Location: Northern Ireland
Member since Mon, Nov 14, 2022
1 Year ago
;