目录
应用场景
朋友们有没有遇到这样一种场景:部署某个软件时,需要安装一堆的先决条件包。一个个安装太麻烦;一起安装吧,又担心其中有些包没装上,且因为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、针对每个软件包的安装情况进行条件分支判断,给出不不同的输出
输出结果截图如下:
知识提炼
上述脚本中应用到的一些主要知识点在这里给朋友们汇总下:
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命令的意思是退出脚本。
以上就是本次的分享,希望能给朋友们带来些许帮助和便利。
下次分享再见。