プログラムが既にインストールされているかどうかをチェックし、インストールされていない場合はインストールする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
あなたはこれを行うことができます:
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
これは、スクリプトで使用する目的で作成した関数です。必要なパッケージがインストールされているかどうかを確認し、インストールされていない場合は、インストールするようユーザーに求めます。パラメーターとしてパッケージ名が必要です。必要なプログラムが属するパッケージの名前がわからない場合は、検索できます。利用可能な情報 こちら
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
}
このコマンド行は、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
いくつかのことに注意してください。
そもそもなぜそれを確認したいのですか?正当な理由がない限り、apt-get install package
を超えないでください。既にインストールされている場合、新しいバージョンが利用可能であれば更新され、インストールされていて最新であれば、何も起こりません。適用する必要のある構成がある場合、パッケージに依存する構成パッケージの構築や、ansibleなどの構成管理ソフトウェアの使用など、他のオプションがあります。
apt-mark
を使用してインストール済みパッケージを確認する簡単な方法:
apt-mark showinstall
は、install(インストール済み、またはインストール待ち)のマークが付いたすべてのパッケージをリストします。その後、気にするパッケージを単純にgrepするだけです。
例:apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"