当前位置: 首页 > news >正文

判断软件是否安装,如果没有则自动安装

文章目录

    • 判断软件是否安装,如果没有则自动安装
      • 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
http://www.xdnf.cn/news/927199.html

相关文章:

  • 声音信号的基频检测(python版本)
  • C++学习思路
  • DL00335-基于深度学习YOLOv11的煤矸石检测含完整数据集
  • [逆向工程] C实现过程调试与钩子安装(二十七)
  • 关于datetime获取时间的问题
  • 顶级创新者在人机互助中成为关键乘数(而并非简单地加数)
  • can转Profinet网关转换:S7-1200PLC与施耐德变频器间的通信实现
  • 测试工程师的AI测试开发进阶:LangChain在多测试领域的实战与思考
  • Go 语言 range 关键字全面解析
  • 如何从浏览器中导出网站证书
  • 蓝牙音乐(A2DP)音频延迟的一些感想跟分析,让你对A2DP体验更佳深入
  • Win11打开应用程序会弹出“打开文件-安全警告“弹框
  • Linux实战篇、第一章_02若依前后端部署之路(前端)
  • 基于51单片机的光强调节LED亮度
  • DAY 44 预训练模型
  • SD模型部署
  • 微服务架构详解:从入门到实战
  • Codeforces Round 1025 (Div. 2) B. Slice to Survive
  • PCB有铜半孔工艺——高密度电子连接的“隐形桥梁”
  • 能 ping 通网址,但是网页打不开
  • 嵌入式知识篇---Zigbee串口
  • 基于51单片机的光强控制LED灯亮灭
  • C++11 Token Bucket (令牌桶)算法的锁无实现及应用
  • 《前缀和》题集
  • 0基础破解Typora,使用正版已激活Typora
  • GIC700组件
  • 计算机组成原理-存储器的概述
  • 按字典序排列最小的等效字符串
  • Linux -- 进程信号
  • DFS(深度优先搜索)