#!/bin/bash
# 编写人员:shifouwan 2022-06-10
# 使用说明:1)需要赋予chmod +x执行权限 2)确保yum源正常 3)适用范围CentOS7.x安装Oracle11.2
# 日志记录
checklog="check_`date +"%Y%m%d"`.log"
echo -e "\e[1;33m-----自动执行Oracle11g安装依赖检查-----\e[0m"
echo -e "开始检查: `date +'%Y-%m-%d %T'`\n" >> $checklog
# centos7安装oracle11g需要的依赖包,其他操作系统可从下面链接获取需要的依赖包替换checklists
# https://docs.oracle.com/cd/E11882_01/install.112/e24326/toc.htm#BHCGJCEA
checklists=(
binutils-2.23.52.0.1-12.el7.x86_64
compat-libcap1-1.10-3.el7.x86_64
compat-libstdc++-33-3.2.3-71.el7.i686
compat-libstdc++-33-3.2.3-71.el7.x86_64
gcc-4.8.2-3.el7.x86_64
gcc-c++-4.8.2-3.el7.x86_64
glibc-2.17-36.el7.i686
glibc-2.17-36.el7.x86_64
glibc-devel-2.17-36.el7.i686
glibc-devel-2.17-36.el7.x86_64
ksh
libaio-0.3.109-9.el7.i686
libaio-0.3.109-9.el7.x86_64
libaio-devel-0.3.109-9.el7.i686
libaio-devel-0.3.109-9.el7.x86_64
libgcc-4.8.2-3.el7.i686
libgcc-4.8.2-3.el7.x86_64
libstdc++-4.8.2-3.el7.i686
libstdc++-4.8.2-3.el7.x86_64
libstdc++-devel-4.8.2-3.el7.i686
libstdc++-devel-4.8.2-3.el7.x86_64
libXi-1.7.2-1.el7.i686
libXi-1.7.2-1.el7.x86_64
libXtst-1.2.2-1.el7.i686
libXtst-1.2.2-1.el7.x86_64
make-3.82-19.el7.x86_64
sysstat-10.1.5-1.el7.x86_64
unixODBC-2.3.1-6.el7.x86_64 or later
unixODBC-2.3.1-6.el7.i686 or later
unixODBC-devel-2.3.1-6.el7.x86_64 or later
unixODBC-devel-2.3.1-6.el7.i686 or later
)
# 进度条参数
pr_str='#'
pr_ch=('|' '\' '-' '/')
pr_sum=${#checklists[@]}
# 检查未通过
check_fail=0
# 遍历依赖数组并执行安装
for ((i=0;i<${#checklists[@]};i++)) do
# 进度条增加进度
pr_str+='#'
# s为列表值,str是处理过带*的值
str=""
s=${checklists[i]}
# 判断是否包含+,如果包含,则删除自右边开始往左数第一个+以及往右的所有内容,后面为拼装内容
if [[ "$s" =~ "+" ]]
then
str=${s%+*}"+*" # 如:gcc-c++-4.8.2-3.e17.x86_64 处理完为:gcc-c++*
# 判断是否包含-,如果包含,则删除自右边开始往左数第一个-以及往右的所有内容,后面为拼装内容
elif [[ "$s" =~ "-" ]]
then
str=${s%%-*}"*" # 如:binutils-2.23.52.0.1-12.e17.x84_64 处理完:binutils*
# 判断是否包含or或者later,如果包含,直接跳过
elif [[ "$s" =~ "or" ]] || [[ "$s" =~ "later" ]]
then
continue
# 除上面情况,直接截取全部
else
str=${s:0}"*" # 如:ksh 处理完:ksh*
fi
# 查询是否已经安装
query_rslt=`rpm -qa | grep ${str%%\*}`
# 如果未安装,则使用yum安装
if [[ !($query_rslt =~ ${str%%\*}) ]]
then
echo -e "\n开始自动安装:\e[1;35m$s\e[0m" >> $checklog
yum install -y $str >> $checklog 2>&1
# yum安装完验证是否已经安装成功
query_rslt_check=`rpm -qa | grep ${str%%\*}`
if [[ !($query_rslt_check =~ ${str%%\*}) ]]
then
echo -e "\n\e[1;31m--yum安装失败:$s\e[0m"
check_fail=$(($check_fail+1))
fi
fi
# 进度条显示
printf "[%-"$pr_sum"s][%d%%][%c]\r" $pr_str $(((i+1)*100 / pr_sum)) ${pr_ch[$i%4]}
done
# 存在未通过检查的依赖包
if [ $check_fail == 0 ]
then
echo -e "\n\e[1;32m检查通过,依赖包已全部安装\e[0m" | tee -a $checklog
else
echo -e "\n共有\e[1;31m$check_fail条\e[0m检查未通过,自动安装失败,请手动执行安装" | tee -a $checklog
fi
echo -e "\n结束检查: `date +'%Y-%m-%d %T'`" >> $checklog
echo "日志存放路径:`pwd`/$checklog"
exit
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。