我如何创建一个 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
答案1
你可以这样做:
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
答案2
这行命令将使用该程序进行检查,如果已安装则返回,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
请注意以下几点:
- 安装时你必须处理依赖问题
- 为了避免在安装过程中与脚本交互,请参阅这里举些例子。
- 您可以捕获该函数的返回值并使用它来决定是否安装。
答案3
这是我为此目的编写的一个函数,我将其用在脚本中。它会检查所需的包是否已安装,如果没有,则提示用户安装。它需要包名称作为参数。如果您不知道所需程序所属的包的名称,您可以查找它。有关该信息可用这里。
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
你为什么要首先检查它?除非你有充分的理由,否则不要这样做,就apt-get install package
过去吧。如果它已经安装,如果有新版本可用,它将被更新,如果它已经安装并且是最新的,则什么也不会发生。如果您需要应用某些配置,还有其他选择,例如构建依赖于该包的配置包或使用配置管理软件(如 ansible)。