Script to check if some program is already installed
How can I create a bash script that checks if a program is already installed, and if it isn't, installs it?
Thanks for your help.
Here's the code I have so far:
#/bin/bash
PS3="choose an option"
select opcion in "Installing_Youtube" "exit"
do
case $opcion in
"Installing_Youtube")
youtube-dl > /usr/bin
if [ $? -eq 127 ] ; then
echo "installing youtube"
apt-get update
apt-get install youtube-dl
mkdir Videos
else
echo "Youtube already installed"
fi
;;
"exit")
exit
Solution 1:
you can do this:
dpkg -s <packagename> &> /dev/null
then check exit status.only if the exit status of the above command was equal to 0
then the package installed.
so:
#!/bin/bash
echo "enter your package name"
read name
dpkg -s $name &> /dev/null
if [ $? -ne 0 ]
then
echo "not installed"
sudo apt-get update
sudo apt-get install $name
else
echo "installed"
fi
Solution 2:
Here's a function I wrote for the purpose that I use in my scripts. It checks to see if the required package is installed and if not, prompts the user to install it. It requires a package name as a parameter. If you don't know the name of the package a required program belongs to you can look it up. Information on that available here.
function getreq {
dpkg-query --show "$1"
if [ "$?" = "0" ];
then
echo "$1" found
else
echo "$1" not found. Please approve installation.
sudo apt-get install "$1"
if [ "$?" = "0" ];
then echo "$1" installed successfully.
fi
fi
}
Solution 3:
This line of command will check using the which
program and will return 0
if installed and 1
if not:
which apache | grep -o apache > /dev/null && echo 0 || echo 1
Of course you will use it in this manner in your script:
which "$1" | grep -o "$1" > /dev/null && echo "Installed!" || echo "Not Installed!"
A simple usage would be:
#!/usr/bin/env bash
set -e
function checker() {
which "$1" | grep -o "$1" > /dev/null && return 0 || return 1
}
if checker "$1" == 0 ; then echo "Installed"; else echo "Not Installed!"; fi
Note several things:
- You will have to deal with dependenciy issues while installing
- To avoid interaaction with script during install see here for examples.
- You can catch the return values from that function an use it to decide whether to install or not.
Solution 4:
One easy way to check for installed packages using apt-mark
:
apt-mark showinstall
will list all packages marked install (already installed, or queued for installation). After that, it's a simple matter of grepping the package(s) you care about.
Example: apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"