web-dev-qa-db-fra.com

Script pour vérifier si un programme est déjà installé

Comment créer un script bash qui vérifie si un programme est déjà installé et si ce n'est pas le cas, l'installe?

Merci de votre aide.

Voici le code que j'ai jusqu'à présent:

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

tu peux le faire:

dpkg -s <packagename> &> /dev/null

puis vérifiez le statut de sortie .niquement si le statut de sortie de la commande ci-dessus était égal à 0 puis du paquet installé.

alors:

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

Voici une fonction que j'ai écrite dans le but que j'utilise dans mes scripts. Il vérifie si le paquet requis est installé et si non, il invite l'utilisateur à l'installer. Il nécessite un nom de package en tant que paramètre. Si vous ne connaissez pas le nom du paquet auquel appartient un programme requis, vous pouvez le rechercher. Informations sur la disponibilité ici.

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
}
4
Elder Geek

Cette ligne de commande vérifiera à l'aide du programme which et renverra 0 si elle est installée et 1 si ce n'est pas le cas:

which Apache | grep -o Apache > /dev/null &&  echo 0 || echo 1

Bien sûr, vous allez l'utiliser de cette manière dans votre script:

which "$1" | grep -o "$1" > /dev/null &&  echo "Installed!" || echo "Not Installed!"

Un usage simple serait:

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

Notez plusieurs choses:

  1. Vous devrez faire face à des problèmes de dépendance lors de l'installation
  2. Pour éviter toute interaction avec le script lors de l’installation, voir here pour des exemples.
  3. Vous pouvez intercepter les valeurs de retour de cette fonction et l'utiliser pour décider d'installer ou non.
3
George Udosen

Pourquoi voulez-vous vérifier en premier lieu? À moins que vous n'ayez une bonne raison, ne le faites pas, juste apt-get install package terminé. S'il est déjà installé, il sera mis à jour si une version plus récente est disponible, si elle est installée et si elle est à jour, rien ne se passera. Si vous avez une configuration à appliquer, il existe d'autres options, telles que la construction d'un package de configuration qui dépend du package ou l'utilisation d'un logiciel de gestion de la configuration, tel que ansible.

3
user2567875

Un moyen simple de rechercher les packages installés à l'aide de apt-mark:

apt-mark showinstall listera tous les packages marqués install (déjà installé ou mis en file d'attente pour l'installation). Après cela, il suffit simplement d’emballer le ou les colis qui vous intéressent.

Exemple: apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"

1
user535733