bashapt-get

How can I check if a package is installed and install it if not?


I'm working on a Ubuntu system and currently this is what I'm doing:

if ! which command > /dev/null; then
   echo -e "Command not found! Install? (y/n) \c"
   read
   if "$REPLY" = "y"; then
      sudo apt-get install command
   fi
fi

Is this what most people would do? Or is there a more elegant solution?


Solution

  • To check if packagename was installed, type:

    dpkg -s <packagename>
    

    You can also use dpkg-query that has a neater output for your purpose, and accepts wild cards, too.

    dpkg-query -l <packagename>
    

    To find what package owns the command, try:

    dpkg -S `which <command>`
    

    You can use these in an if statement in bash like this:

    if dpkg -s desired-pkg-name &>/dev/null; then
      echo 'desired-pkg-name is installed'
    fi
    

    For further details, see article Find out if package is installed in Linux and dpkg cheat sheet.