shell脚本案例:yum安装

目录

应用场景

shell脚本

知识提炼 


应用场景

朋友们有没有遇到这样一种场景:部署某个软件时,需要安装一堆的先决条件包。一个个安装太麻烦;一起安装吧,又担心其中有些包没装上,且因为yum安装的输出内容太多难以查看安装失败的包。这种情况纯靠手工有些让人头疼,其实俺也头疼;所以今天写了个shell脚本帮助我进行先决条件包安装,且可以更清楚的查看每个包的安装情况。

shell脚本

这里选取的例子是Oracle12C在安装时,需要安装的先决条件软件包,有三十几个包。原本我在部署这些包时是直接用下面的命令进行安装:

yum install -y bc
yum install -y compat-libcap1*
yum install -y compat-libcap*
yum install -y binutils 
yum install -y compat-libstdc++-33 
yum install -y elfutils-libelf 
yum install -y elfutils-libelf-devel 
yum install -y gcc 
yum install -y gcc-c++ 
yum install -y glibc-2.5 
yum install -y glibc-common 
yum install -y glibc-devel 
yum install -y glibc-headers 
yum install -y libaio-devel 
yum install -y libgcc 
yum install -y libstdc++ 
yum install -y libstdc++-devel 
yum install -y make 
yum install -y sysstat 
yum install -y unixODBC 
yum install -y unixODBC-devel
yum install -y binutils*
yum install -y compat-libstdc*
yum install -y elfutils-libelf*
yum install -y gcc*
yum install -y glibc*
yum install -y ksh*
yum install -y libaio*
yum install -y libgcc*
yum install -y libstdc*
yum install -y make*
yum install -y sysstat*
yum install -y libXp*
yum install -y glibc-kernheaders
yum install -y net-tools-*

每次我都能在它刷刷刷的输出中瞥见几个红色的ERROR,但也就是一眼,下一秒就一闪而过。所以针对这个情况,我写了个shell脚本如下: 

#!/bin/bash
yum clean all 1>/dev/null
yum list 1>/dev/null 2>/dev/null

a=$?
echo "★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"
echo "                                                        "

if [ $a = 0 ];
then
        echo -e "\e[32m yum源已配置,开始进行软件安装!\e[0m";
        echo "                                                        "
        echo "★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"
else
        echo -e "\e[31m yum源配置有问题,请检查yum源!\e[0m";
        echo -e "\e[31m 已退出脚本运行!\e[0m "
        echo "                                                        "
        echo "★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"
        exit
fi


pak=(bc compat-libcap1* binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc\
 gcc-c++ glibc-2.5 glibc-common glibc-devel glibc-headers libaio-devel libgcc libstdc++ libstdc++-devel\
 make sysstat unixODBC unixODBC-devel binutils* compat-libstdc* elfutils-libelf* gcc* glibc* ksh* libaio*\
 libaio* libgcc* libstdc* make* sysstat* libXp* glibc-kernheaders net-tools-*)


for i in ${pak[*]}
do
        echo "开始安装:$i"
        output=$(yum -y install $i)

con1="*already installed*"
con2="*succeeded*"

case $output in
${con1})
        echo -e "\e[33m $i 这个包已经安装过,不需要重复安装!\e[0m";;
${con2})
        echo -e "\e[32m $i 这个包安装成功! \e[0m";;
*)
        echo -e "\e[31m $i 这个包安装异常!请手动查看!\e[0m";;
esac

echo "========================================================"

done

这个脚本的大概思路我先和各位朋友描述下:

1、判断所在操作系统的YUM源是否有效。

如果有效的话,就继续向下执行脚本,进行先决条件包安装;如果无效,那么就退出脚本执行,否则下面的三十几个软件包全部都会安装失败,没有意义了。

2、 将Oracle12C的先决条件软件包定义成一个数组变量pak

3、循环遍历前面所定义的数组变量pak中的软件包

4、对每个遍历的软件包进行yum安装

5、针对每个软件包的安装情况进行条件分支判断,给出不不同的输出

输出结果截图如下:

当yum源有问题时,会输出此内容,并退出脚本执行

当yum源没问题时,会输出此内容,这里这是输出的片段

知识提炼 

上述脚本中应用到的一些主要知识点在这里给朋友们汇总下:

1、yum

首先是yum相关内容,这哥们儿诞生出来是为了解决rpm包的依赖关系,很强大,很好用。但不过多赘述,这里只提一下脚本中用到的命令。

yum clean all:清空yum的缓存,因为有的yum可能已经失效了,但因为缓存的原因,执行yum lsit命令依然不会报错,所以优先执行它。

yum list:将yum中的软件包列出来,如果yum未安装或者失效等,执行该命令会报错。

yum -y install $i :执行yum安装。$i是变量;-y 是yum的参数,执行安装时,不会再提醒是否确认安装。

2、特殊变量

$?:如果$?返回0,代表上一条命令是成功的;如果不是0,代表上一条命令是失败的。

3、if 条件判断

if [布尔表达式]
then 
     xxxxxx
else 
     xxxxxx
fi

4、for 循环

for x in 1 2 3 4 5
do

    #执行区

done

5、case 条件分支判断

case 变量名 in
模式1)
    模式1匹配时执行的代码块
    ;;
模式2)
    模式2匹配时执行的代码块
    ;;
*)
    所有模式都不匹配时执行的代码块
    ;;
esac

 6、echo 颜色输出

\e 是转义起始符,定义一个转义序列,可以使用\033代替

[ 标识开始定义颜色

m 转义终止符,表示颜色定义完毕

结尾再次使用 \e[ 表示再次开启颜色定义

0表示使用默认的颜色

m表示颜色定义结束;

所以\e[0m的作用是恢复之前的配色方案

默认=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,紫色=35,天蓝色=36,白色=3

echo -e "\e[0m hello world \e[0m";
 hello world
echo -e "\e[30m hello world \e[0m";
 hello world
echo -e "\e[32m hello world \e[0m";
 hello world
echo -e "\e[33m hello world \e[0m";
 hello world
echo -e "\e[34m hello world \e[0m";
 hello world
echo -e "\e[35m hello world \e[0m";
 hello world
echo -e "\e[36m hello world \e[0m";
 hello world
echo -e "\e[3m hello world \e[0m";
 hello world

效果图

7、exit

exit命令的意思是退出脚本。


 以上就是本次的分享,希望能给朋友们带来些许帮助和便利。

下次分享再见。

  • 25
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜豆豆耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值