Script to check if some program is already installed












7















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









share|improve this question




















  • 9





    Do you intend to overwrite /usr/bin ?

    – D. Ben Knoble
    Dec 23 '18 at 0:51






  • 1





    Are you differentiating between package names, and executable filenames? Or want to check both? Only George's answer currently checks for executables

    – Xen2050
    Dec 23 '18 at 3:27











  • Why do you want to check it? What's the purposed use of this script?

    – Braiam
    Dec 23 '18 at 11:11











  • @Braiam At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

    – Joe
    Dec 27 '18 at 0:42











  • @Joe which is a bad solution. You should instead just get the list of installed packages with apt-mark showmanual then installing with something like apt-get install "$(< package.list)".

    – Braiam
    Dec 27 '18 at 13:02
















7















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









share|improve this question




















  • 9





    Do you intend to overwrite /usr/bin ?

    – D. Ben Knoble
    Dec 23 '18 at 0:51






  • 1





    Are you differentiating between package names, and executable filenames? Or want to check both? Only George's answer currently checks for executables

    – Xen2050
    Dec 23 '18 at 3:27











  • Why do you want to check it? What's the purposed use of this script?

    – Braiam
    Dec 23 '18 at 11:11











  • @Braiam At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

    – Joe
    Dec 27 '18 at 0:42











  • @Joe which is a bad solution. You should instead just get the list of installed packages with apt-mark showmanual then installing with something like apt-get install "$(< package.list)".

    – Braiam
    Dec 27 '18 at 13:02














7












7








7


2






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









share|improve this question
















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






apt bash scripts






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 22 '18 at 22:01









Elder Geek

26.5k952126




26.5k952126










asked Dec 22 '18 at 19:30









GUILLEM NAVALON BABIAGUILLEM NAVALON BABIA

487




487








  • 9





    Do you intend to overwrite /usr/bin ?

    – D. Ben Knoble
    Dec 23 '18 at 0:51






  • 1





    Are you differentiating between package names, and executable filenames? Or want to check both? Only George's answer currently checks for executables

    – Xen2050
    Dec 23 '18 at 3:27











  • Why do you want to check it? What's the purposed use of this script?

    – Braiam
    Dec 23 '18 at 11:11











  • @Braiam At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

    – Joe
    Dec 27 '18 at 0:42











  • @Joe which is a bad solution. You should instead just get the list of installed packages with apt-mark showmanual then installing with something like apt-get install "$(< package.list)".

    – Braiam
    Dec 27 '18 at 13:02














  • 9





    Do you intend to overwrite /usr/bin ?

    – D. Ben Knoble
    Dec 23 '18 at 0:51






  • 1





    Are you differentiating between package names, and executable filenames? Or want to check both? Only George's answer currently checks for executables

    – Xen2050
    Dec 23 '18 at 3:27











  • Why do you want to check it? What's the purposed use of this script?

    – Braiam
    Dec 23 '18 at 11:11











  • @Braiam At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

    – Joe
    Dec 27 '18 at 0:42











  • @Joe which is a bad solution. You should instead just get the list of installed packages with apt-mark showmanual then installing with something like apt-get install "$(< package.list)".

    – Braiam
    Dec 27 '18 at 13:02








9




9





Do you intend to overwrite /usr/bin ?

– D. Ben Knoble
Dec 23 '18 at 0:51





Do you intend to overwrite /usr/bin ?

– D. Ben Knoble
Dec 23 '18 at 0:51




1




1





Are you differentiating between package names, and executable filenames? Or want to check both? Only George's answer currently checks for executables

– Xen2050
Dec 23 '18 at 3:27





Are you differentiating between package names, and executable filenames? Or want to check both? Only George's answer currently checks for executables

– Xen2050
Dec 23 '18 at 3:27













Why do you want to check it? What's the purposed use of this script?

– Braiam
Dec 23 '18 at 11:11





Why do you want to check it? What's the purposed use of this script?

– Braiam
Dec 23 '18 at 11:11













@Braiam At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

– Joe
Dec 27 '18 at 0:42





@Braiam At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

– Joe
Dec 27 '18 at 0:42













@Joe which is a bad solution. You should instead just get the list of installed packages with apt-mark showmanual then installing with something like apt-get install "$(< package.list)".

– Braiam
Dec 27 '18 at 13:02





@Joe which is a bad solution. You should instead just get the list of installed packages with apt-mark showmanual then installing with something like apt-get install "$(< package.list)".

– Braiam
Dec 27 '18 at 13:02










5 Answers
5






active

oldest

votes


















6














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





share|improve this answer


























  • Really thank's! It works :D

    – GUILLEM NAVALON BABIA
    Dec 22 '18 at 21:13













  • Except it doesn't? What happened to the line with sudo apt install $name? The command needs to go on the next line... Otherwise, nice work...

    – Zanna
    Dec 22 '18 at 21:30






  • 3





    Note that software could be installed in a variety of ways, and dpkg is only relevant for installed debian packages. In OP's particular case, youtube-dl for instance could be also installed via python's package manager pip

    – Sergiy Kolodyazhnyy
    Dec 22 '18 at 21:36






  • 2





    Why not if dpkg -s “$name” &> /dev/null ; then ? Same effect, cleaner/clearer imo.

    – D. Ben Knoble
    Dec 23 '18 at 0:52











  • indeed, checking the exit status is exactly what if does...

    – Zanna
    Dec 23 '18 at 10:35



















4














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
}





share|improve this answer

































    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:




    1. You will have to deal with dependenciy issues while installing

    2. To avoid interaaction with script during install see here for examples.

    3. You can catch the return values from that function an use it to decide whether to install or not.






    share|improve this answer


























    • which is super non-portable. I frequently use command -v instead, but it depends heavily on the type of name you’re looking for (alias, function, executable, &c.)

      – D. Ben Knoble
      Dec 23 '18 at 0:54











    • Super non-portable for a question that is for an Ubuntu machine? This is isn't Unix & Linux site! If i were answering it on Unix & Linux site that would be a different matter!

      – George Udosen
      Dec 23 '18 at 13:15



















    3














    Why do you want to check it in the first place? Unless you have a good reason for it, don't do it, just apt-get install package over. If it's already installed it will be updated if there is a newer version available, if it is installed and it is up to date, nothing will happen. In case you have some configuration that needs to be applied, there are other options, like building an configuration package which depends on the package or using configuration management software like ansible.






    share|improve this answer


























    • Something will often happen: At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

      – Joe
      Dec 27 '18 at 0:45



















    1














    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"






    share|improve this answer


























    • You're on the right track! Just change it to this to eliminate the false positives: apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"

      – Eric Mintz
      Dec 22 '18 at 21:13













    • @EricMintz - thanks for the improvement! Edited.

      – user535733
      Dec 23 '18 at 1:31











    Your Answer








    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "89"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1103860%2fscript-to-check-if-some-program-is-already-installed%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    5 Answers
    5






    active

    oldest

    votes








    5 Answers
    5






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    6














    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





    share|improve this answer


























    • Really thank's! It works :D

      – GUILLEM NAVALON BABIA
      Dec 22 '18 at 21:13













    • Except it doesn't? What happened to the line with sudo apt install $name? The command needs to go on the next line... Otherwise, nice work...

      – Zanna
      Dec 22 '18 at 21:30






    • 3





      Note that software could be installed in a variety of ways, and dpkg is only relevant for installed debian packages. In OP's particular case, youtube-dl for instance could be also installed via python's package manager pip

      – Sergiy Kolodyazhnyy
      Dec 22 '18 at 21:36






    • 2





      Why not if dpkg -s “$name” &> /dev/null ; then ? Same effect, cleaner/clearer imo.

      – D. Ben Knoble
      Dec 23 '18 at 0:52











    • indeed, checking the exit status is exactly what if does...

      – Zanna
      Dec 23 '18 at 10:35
















    6














    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





    share|improve this answer


























    • Really thank's! It works :D

      – GUILLEM NAVALON BABIA
      Dec 22 '18 at 21:13













    • Except it doesn't? What happened to the line with sudo apt install $name? The command needs to go on the next line... Otherwise, nice work...

      – Zanna
      Dec 22 '18 at 21:30






    • 3





      Note that software could be installed in a variety of ways, and dpkg is only relevant for installed debian packages. In OP's particular case, youtube-dl for instance could be also installed via python's package manager pip

      – Sergiy Kolodyazhnyy
      Dec 22 '18 at 21:36






    • 2





      Why not if dpkg -s “$name” &> /dev/null ; then ? Same effect, cleaner/clearer imo.

      – D. Ben Knoble
      Dec 23 '18 at 0:52











    • indeed, checking the exit status is exactly what if does...

      – Zanna
      Dec 23 '18 at 10:35














    6












    6








    6







    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





    share|improve this answer















    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






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Dec 23 '18 at 18:24









    GUILLEM NAVALON BABIA

    487




    487










    answered Dec 22 '18 at 20:25









    HosseinHossein

    1014




    1014













    • Really thank's! It works :D

      – GUILLEM NAVALON BABIA
      Dec 22 '18 at 21:13













    • Except it doesn't? What happened to the line with sudo apt install $name? The command needs to go on the next line... Otherwise, nice work...

      – Zanna
      Dec 22 '18 at 21:30






    • 3





      Note that software could be installed in a variety of ways, and dpkg is only relevant for installed debian packages. In OP's particular case, youtube-dl for instance could be also installed via python's package manager pip

      – Sergiy Kolodyazhnyy
      Dec 22 '18 at 21:36






    • 2





      Why not if dpkg -s “$name” &> /dev/null ; then ? Same effect, cleaner/clearer imo.

      – D. Ben Knoble
      Dec 23 '18 at 0:52











    • indeed, checking the exit status is exactly what if does...

      – Zanna
      Dec 23 '18 at 10:35



















    • Really thank's! It works :D

      – GUILLEM NAVALON BABIA
      Dec 22 '18 at 21:13













    • Except it doesn't? What happened to the line with sudo apt install $name? The command needs to go on the next line... Otherwise, nice work...

      – Zanna
      Dec 22 '18 at 21:30






    • 3





      Note that software could be installed in a variety of ways, and dpkg is only relevant for installed debian packages. In OP's particular case, youtube-dl for instance could be also installed via python's package manager pip

      – Sergiy Kolodyazhnyy
      Dec 22 '18 at 21:36






    • 2





      Why not if dpkg -s “$name” &> /dev/null ; then ? Same effect, cleaner/clearer imo.

      – D. Ben Knoble
      Dec 23 '18 at 0:52











    • indeed, checking the exit status is exactly what if does...

      – Zanna
      Dec 23 '18 at 10:35

















    Really thank's! It works :D

    – GUILLEM NAVALON BABIA
    Dec 22 '18 at 21:13







    Really thank's! It works :D

    – GUILLEM NAVALON BABIA
    Dec 22 '18 at 21:13















    Except it doesn't? What happened to the line with sudo apt install $name? The command needs to go on the next line... Otherwise, nice work...

    – Zanna
    Dec 22 '18 at 21:30





    Except it doesn't? What happened to the line with sudo apt install $name? The command needs to go on the next line... Otherwise, nice work...

    – Zanna
    Dec 22 '18 at 21:30




    3




    3





    Note that software could be installed in a variety of ways, and dpkg is only relevant for installed debian packages. In OP's particular case, youtube-dl for instance could be also installed via python's package manager pip

    – Sergiy Kolodyazhnyy
    Dec 22 '18 at 21:36





    Note that software could be installed in a variety of ways, and dpkg is only relevant for installed debian packages. In OP's particular case, youtube-dl for instance could be also installed via python's package manager pip

    – Sergiy Kolodyazhnyy
    Dec 22 '18 at 21:36




    2




    2





    Why not if dpkg -s “$name” &> /dev/null ; then ? Same effect, cleaner/clearer imo.

    – D. Ben Knoble
    Dec 23 '18 at 0:52





    Why not if dpkg -s “$name” &> /dev/null ; then ? Same effect, cleaner/clearer imo.

    – D. Ben Knoble
    Dec 23 '18 at 0:52













    indeed, checking the exit status is exactly what if does...

    – Zanna
    Dec 23 '18 at 10:35





    indeed, checking the exit status is exactly what if does...

    – Zanna
    Dec 23 '18 at 10:35













    4














    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
    }





    share|improve this answer






























      4














      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
      }





      share|improve this answer




























        4












        4








        4







        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
        }





        share|improve this answer















        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
        }






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Dec 23 '18 at 13:52

























        answered Dec 22 '18 at 21:31









        Elder GeekElder Geek

        26.5k952126




        26.5k952126























            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:




            1. You will have to deal with dependenciy issues while installing

            2. To avoid interaaction with script during install see here for examples.

            3. You can catch the return values from that function an use it to decide whether to install or not.






            share|improve this answer


























            • which is super non-portable. I frequently use command -v instead, but it depends heavily on the type of name you’re looking for (alias, function, executable, &c.)

              – D. Ben Knoble
              Dec 23 '18 at 0:54











            • Super non-portable for a question that is for an Ubuntu machine? This is isn't Unix & Linux site! If i were answering it on Unix & Linux site that would be a different matter!

              – George Udosen
              Dec 23 '18 at 13:15
















            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:




            1. You will have to deal with dependenciy issues while installing

            2. To avoid interaaction with script during install see here for examples.

            3. You can catch the return values from that function an use it to decide whether to install or not.






            share|improve this answer


























            • which is super non-portable. I frequently use command -v instead, but it depends heavily on the type of name you’re looking for (alias, function, executable, &c.)

              – D. Ben Knoble
              Dec 23 '18 at 0:54











            • Super non-portable for a question that is for an Ubuntu machine? This is isn't Unix & Linux site! If i were answering it on Unix & Linux site that would be a different matter!

              – George Udosen
              Dec 23 '18 at 13:15














            3












            3








            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:




            1. You will have to deal with dependenciy issues while installing

            2. To avoid interaaction with script during install see here for examples.

            3. You can catch the return values from that function an use it to decide whether to install or not.






            share|improve this answer















            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:




            1. You will have to deal with dependenciy issues while installing

            2. To avoid interaaction with script during install see here for examples.

            3. You can catch the return values from that function an use it to decide whether to install or not.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Dec 22 '18 at 20:49

























            answered Dec 22 '18 at 20:27









            George UdosenGeorge Udosen

            20.5k94467




            20.5k94467













            • which is super non-portable. I frequently use command -v instead, but it depends heavily on the type of name you’re looking for (alias, function, executable, &c.)

              – D. Ben Knoble
              Dec 23 '18 at 0:54











            • Super non-portable for a question that is for an Ubuntu machine? This is isn't Unix & Linux site! If i were answering it on Unix & Linux site that would be a different matter!

              – George Udosen
              Dec 23 '18 at 13:15



















            • which is super non-portable. I frequently use command -v instead, but it depends heavily on the type of name you’re looking for (alias, function, executable, &c.)

              – D. Ben Knoble
              Dec 23 '18 at 0:54











            • Super non-portable for a question that is for an Ubuntu machine? This is isn't Unix & Linux site! If i were answering it on Unix & Linux site that would be a different matter!

              – George Udosen
              Dec 23 '18 at 13:15

















            which is super non-portable. I frequently use command -v instead, but it depends heavily on the type of name you’re looking for (alias, function, executable, &c.)

            – D. Ben Knoble
            Dec 23 '18 at 0:54





            which is super non-portable. I frequently use command -v instead, but it depends heavily on the type of name you’re looking for (alias, function, executable, &c.)

            – D. Ben Knoble
            Dec 23 '18 at 0:54













            Super non-portable for a question that is for an Ubuntu machine? This is isn't Unix & Linux site! If i were answering it on Unix & Linux site that would be a different matter!

            – George Udosen
            Dec 23 '18 at 13:15





            Super non-portable for a question that is for an Ubuntu machine? This is isn't Unix & Linux site! If i were answering it on Unix & Linux site that would be a different matter!

            – George Udosen
            Dec 23 '18 at 13:15











            3














            Why do you want to check it in the first place? Unless you have a good reason for it, don't do it, just apt-get install package over. If it's already installed it will be updated if there is a newer version available, if it is installed and it is up to date, nothing will happen. In case you have some configuration that needs to be applied, there are other options, like building an configuration package which depends on the package or using configuration management software like ansible.






            share|improve this answer


























            • Something will often happen: At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

              – Joe
              Dec 27 '18 at 0:45
















            3














            Why do you want to check it in the first place? Unless you have a good reason for it, don't do it, just apt-get install package over. If it's already installed it will be updated if there is a newer version available, if it is installed and it is up to date, nothing will happen. In case you have some configuration that needs to be applied, there are other options, like building an configuration package which depends on the package or using configuration management software like ansible.






            share|improve this answer


























            • Something will often happen: At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

              – Joe
              Dec 27 '18 at 0:45














            3












            3








            3







            Why do you want to check it in the first place? Unless you have a good reason for it, don't do it, just apt-get install package over. If it's already installed it will be updated if there is a newer version available, if it is installed and it is up to date, nothing will happen. In case you have some configuration that needs to be applied, there are other options, like building an configuration package which depends on the package or using configuration management software like ansible.






            share|improve this answer















            Why do you want to check it in the first place? Unless you have a good reason for it, don't do it, just apt-get install package over. If it's already installed it will be updated if there is a newer version available, if it is installed and it is up to date, nothing will happen. In case you have some configuration that needs to be applied, there are other options, like building an configuration package which depends on the package or using configuration management software like ansible.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Dec 23 '18 at 10:33









            Zanna

            50.5k13133241




            50.5k13133241










            answered Dec 23 '18 at 3:16









            user2567875user2567875

            1312




            1312













            • Something will often happen: At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

              – Joe
              Dec 27 '18 at 0:45



















            • Something will often happen: At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

              – Joe
              Dec 27 '18 at 0:45

















            Something will often happen: At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

            – Joe
            Dec 27 '18 at 0:45





            Something will often happen: At least with apt, installing an already installed package will change its status from automatic to manual if it was only installed as a dependency of another package. If that other package is later removed, this package will no longer be marked for auto removal. I have a script to install an edited list of packages from a previous install into a new one. This technique keeps it from making a mess of the new system.

            – Joe
            Dec 27 '18 at 0:45











            1














            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"






            share|improve this answer


























            • You're on the right track! Just change it to this to eliminate the false positives: apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"

              – Eric Mintz
              Dec 22 '18 at 21:13













            • @EricMintz - thanks for the improvement! Edited.

              – user535733
              Dec 23 '18 at 1:31
















            1














            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"






            share|improve this answer


























            • You're on the right track! Just change it to this to eliminate the false positives: apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"

              – Eric Mintz
              Dec 22 '18 at 21:13













            • @EricMintz - thanks for the improvement! Edited.

              – user535733
              Dec 23 '18 at 1:31














            1












            1








            1







            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"






            share|improve this answer















            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"







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Dec 23 '18 at 1:30

























            answered Dec 22 '18 at 19:51









            user535733user535733

            7,87722942




            7,87722942













            • You're on the right track! Just change it to this to eliminate the false positives: apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"

              – Eric Mintz
              Dec 22 '18 at 21:13













            • @EricMintz - thanks for the improvement! Edited.

              – user535733
              Dec 23 '18 at 1:31



















            • You're on the right track! Just change it to this to eliminate the false positives: apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"

              – Eric Mintz
              Dec 22 '18 at 21:13













            • @EricMintz - thanks for the improvement! Edited.

              – user535733
              Dec 23 '18 at 1:31

















            You're on the right track! Just change it to this to eliminate the false positives: apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"

            – Eric Mintz
            Dec 22 '18 at 21:13







            You're on the right track! Just change it to this to eliminate the false positives: apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"

            – Eric Mintz
            Dec 22 '18 at 21:13















            @EricMintz - thanks for the improvement! Edited.

            – user535733
            Dec 23 '18 at 1:31





            @EricMintz - thanks for the improvement! Edited.

            – user535733
            Dec 23 '18 at 1:31


















            draft saved

            draft discarded




















































            Thanks for contributing an answer to Ask Ubuntu!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1103860%2fscript-to-check-if-some-program-is-already-installed%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Plaza Victoria

            In PowerPoint, is there a keyboard shortcut for bulleted / numbered list?

            How to put 3 figures in Latex with 2 figures side by side and 1 below these side by side images but in...