web-dev-qa-db-ja.com

何らかのプログラムが既にインストールされているかどうかを確認するスクリプト

プログラムが既にインストールされているかどうかをチェックし、インストールされていない場合はインストールするbashスクリプトを作成するにはどうすればよいですか?

ご協力いただきありがとうございます。

ここに私がこれまでに持っているコードがあります:

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

あなたはこれを行うことができます:

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

次に、終了ステータスを確認します。上記のコマンドの終了ステータスが0に等しい場合のみ、パッケージがインストールされました

そう:

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

これは、スクリプトで使用する目的で作成した関数です。必要なパッケージがインストールされているかどうかを確認し、インストールされていない場合は、インストールするようユーザーに求めます。パラメーターとしてパッケージ名が必要です。必要なプログラムが属するパッケージの名前がわからない場合は、検索できます。利用可能な情報 こちら

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

このコマンド行は、whichプログラムを使用してチェックし、インストールされている場合は0を返し、インストールされていない場合は1を返します。

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

もちろん、スクリプトで次のように使用します。

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

簡単な使用法は次のとおりです。

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

いくつかのことに注意してください。

  1. インストール中にdependenciyの問題に対処する必要があります
  2. インストール中のスクリプトとの相互作用を回避するには、例について here を参照してください。
  3. その関数からの戻り値をキャッチし、それを使用してインストールするかどうかを決定できます。
3
George Udosen

そもそもなぜそれを確認したいのですか?正当な理由がない限り、apt-get install packageを超えないでください。既にインストールされている場合、新しいバージョンが利用可能であれば更新され、インストールされていて最新であれば、何も起こりません。適用する必要のある構成がある場合、パッケージに依存する構成パッケージの構築や、ansibleなどの構成管理ソフトウェアの使用など、他のオプションがあります。

3
user2567875

apt-markを使用してインストール済みパッケージを確認する簡単な方法:

apt-mark showinstallは、install(インストール済み、またはインストール待ち)のマークが付いたすべてのパッケージをリストします。その後、気にするパッケージを単純にgrepするだけです。

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

1
user535733