判断软件是否安装,如果没有则自动安装
文章目录
- 判断软件是否安装,如果没有则自动安装
- Linux 系统(Debian/Ubuntu)
- Linux 系统((RHEL/CentOS)(yum源已配好的情况)
- 判断软件是否安装,如果没有则自动安装(yum源没配的情况下)
- 方法一:直接使用 rpm 命令检查并安装
- 方法二:使用本地安装包
- 方法三:使用源码编译安装
- 方法四:使用通用二进制包安装
- 方法五:先检查yum是否可用,如果不可用会自动配置阿里云yum源。然后检查指定软件包是否安装,未安装则自动安装
判断软件是否安装,如果没有则自动安装
Linux 系统(Debian/Ubuntu)
关于apt和yum源的区别
apt 和 yum 是不同 Linux 发行版的包管理工具:
1.apt 是 Debian/Ubuntu 等基于 Debian 的系统的包管理工具
2.yum (或现在的 dnf) 是 Red Hat/CentOS/Fedora 等基于 RHEL 的系统的包管理工具
正确使用 apt 的方式
1.首先更新 apt 软件源列表
sudo apt update
2.检查软件是否已安装
方法一:使用 dpkg
dpkg -l | grep 软件名
方法二:直接查询
apt list --installed | grep 软件名
3.如果未安装则安装
sudo apt install 软件名 -y
完整的自动检测安装脚本 (apt)
#!/bin/bashPACKAGE_NAME="要安装的软件名"# 检查是否已安装
if dpkg -l | grep -q "^ii $PACKAGE_NAME "; thenecho "$PACKAGE_NAME 已安装"
elseecho "$PACKAGE_NAME 未安装,正在安装..."# 更新源(可选)sudo apt update# 安装软件sudo apt install $PACKAGE_NAME -y# 验证安装if [ $? -eq 0 ]; thenecho "$PACKAGE_NAME 安装成功"elseecho "$PACKAGE_NAME 安装失败"exit 1fi
fi
Linux 系统((RHEL/CentOS)(yum源已配好的情况)
#!/bin/bashPACKAGE_NAME="软件包名" # 替换为实际包名# 检查软件是否安装
if rpm -q $PACKAGE_NAME >/dev/null 2>&1; thenecho "$PACKAGE_NAME 已安装"
elseecho "$PACKAGE_NAME 未安装,正在安装..."sudo yum install -y $PACKAGE_NAME
fi
判断软件是否安装,如果没有则自动安装(yum源没配的情况下)
在 yum 源未配置的情况下,我们需要采用其他方法来检查软件是否安装并完成安装。以下是几种解决方案:
方法一:直接使用 rpm 命令检查并安装
#!/bin/bashPACKAGE_NAME="软件包名" # 替换为实际包名
RPM_URL="http://example.com/path/to/package.rpm" # 替换为实际RPM包URL# 检查软件是否安装
if rpm -q $PACKAGE_NAME >/dev/null 2>&1; thenecho "$PACKAGE_NAME 已安装"
elseecho "$PACKAGE_NAME 未安装,正在安装..."# 下载RPM包echo "正在下载RPM包..."wget -O /tmp/package.rpm $RPM_URL || curl -o /tmp/package.rpm $RPM_URL# 安装RPM包echo "正在安装..."rpm -ivh /tmp/package.rpm# 清理临时文件rm -f /tmp/package.rpmecho "$PACKAGE_NAME 安装完成"
fi
方法二:使用本地安装包
#!/bin/bashPACKAGE_NAME="软件包名"
LOCAL_RPM_PATH="/path/to/local/package.rpm" # 替换为本地RPM包路径if rpm -q $PACKAGE_NAME >/dev/null 2>&1; thenecho "$PACKAGE_NAME 已安装"
elseif [ -f "$LOCAL_RPM_PATH" ]; thenecho "$PACKAGE_NAME 未安装,正在从本地安装..."rpm -ivh $LOCAL_RPM_PATHecho "$PACKAGE_NAME 安装完成"elseecho "错误:本地RPM包 $LOCAL_RPM_PATH 不存在"exit 1fi
fi
方法三:使用源码编译安装
#!/bin/bashPACKAGE_NAME="软件名称"
INSTALL_PREFIX="/usr/local" # 安装路径
SOURCE_URL="http://example.com/path/to/source.tar.gz" # 源码包URL# 检查软件是否安装(通过检查可执行文件)
if [ -f "$INSTALL_PREFIX/bin/$PACKAGE_NAME" ]; thenecho "$PACKAGE_NAME 已安装"
elseecho "$PACKAGE_NAME 未安装,正在从源码安装..."# 安装编译依赖echo "安装编译依赖..."yum install -y gcc make automake autoconf || \apt-get install -y build-essential || \echo "警告:无法自动安装编译工具,请手动安装"# 下载源码echo "下载源码..."mkdir -p /tmp/$PACKAGE_NAMEcd /tmp/$PACKAGE_NAMEwget $SOURCE_URL || curl -O $SOURCE_URL# 解压tar zxvf *.tar.gz || tar xvf *.tar.*cd *# 编译安装echo "编译安装..."./configure --prefix=$INSTALL_PREFIXmakemake install# 清理cd /tmprm -rf /tmp/$PACKAGE_NAMEecho "$PACKAGE_NAME 安装完成"
fi
方法四:使用通用二进制包安装
#!/bin/bashPACKAGE_NAME="软件名称"
BINARY_URL="http://example.com/path/to/binary.tar.gz" # 二进制包URL
INSTALL_DIR="/opt/$PACKAGE_NAME" # 安装目录# 检查软件是否安装
if [ -f "$INSTALL_DIR/bin/$PACKAGE_NAME" ]; thenecho "$PACKAGE_NAME 已安装"
elseecho "$PACKAGE_NAME 未安装,正在安装..."# 创建安装目录mkdir -p $INSTALL_DIR# 下载二进制包echo "下载二进制包..."cd /tmpwget $BINARY_URL || curl -O $BINARY_URL# 解压到安装目录echo "解压安装..."tar zxvf *.tar.gz -C $INSTALL_DIR --strip-components=1 || \tar xvf *.tar.* -C $INSTALL_DIR --strip-components=1# 创建符号链接到/usr/local/binln -sf $INSTALL_DIR/bin/$PACKAGE_NAME /usr/local/bin/$PACKAGE_NAME# 清理rm -f /tmp/*.tar.*echo "$PACKAGE_NAME 安装完成"
fi
方法五:先检查yum是否可用,如果不可用会自动配置阿里云yum源。然后检查指定软件包是否安装,未安装则自动安装
#!/bin/bash# 定义要检查的软件包名称
PKG_NAME=$1# 检查yum是否可用
check_yum_available() {yum --version &>/dev/nullif [ $? -ne 0 ]; thenecho "yum命令不可用,尝试修复..."# 检查是否安装了yumrpm -qa | grep ^yum- &>/dev/nullif [ $? -ne 0 ]; thenecho "yum未安装,尝试安装yum..."rpm -ivh http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-*.rpmfi# 配置阿里云yum源echo "配置阿里云yum源..."curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.reposed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repoyum clean allyum makecachefi
}# 检查软件包是否已安装
check_pkg_installed() {rpm -qa | grep -w "^${PKG_NAME}-" &>/dev/nullreturn $?
}# 主逻辑
if [ -z "$PKG_NAME" ]; thenecho "Usage: $0 <package_name>"exit 1
fiif check_pkg_installed; thenecho "${PKG_NAME} 已安装"
elseecho "${PKG_NAME} 未安装,开始安装..."check_yum_availableyum install -y $PKG_NAME# 验证安装结果if check_pkg_installed; thenecho "${PKG_NAME} 安装成功"elseecho "${PKG_NAME} 安装失败"exit 1fi
fi