自己开发shell脚本实现一键化安装。
一、说明在现实环境中可能需要批量部署服务器,那么在我们已经部署好一台服务以后如果实现剩下的服务批量安装呢:
使用shell能否实现功能:
假设我们要部署lamp或者是lnmp如何实现脚本部署?
使用以下代码可实现:
部署方法1:
#!/bin/sh
menu ( ){ cat<<END
.[install lamp]
.[install lnmp]
.[exit]
pls input the num that you want:
END }
menu
read num
echo "you choice $num"
if [ "$num" -eq ]
then
echo "begin install lamp"
/bin/sh /server/scripts/test///install-lamp.sh
if [ $? -eq ]
then
echo "lamp is been install"
exit
else
echo "lamp install error"
exit
fi
elif [ "$num" -eq ]
then
echo "begin install lamp"
/bin/sh /server/scripts/test///install-lnmp.sh
if [ $? -eq ]
then
echo "lnmp is been install"
exit
else
echo "lnmp install error"
exit
fi elif [ "$num" -eq ]
then
echo "logout"
exit
fi
fi
部署方法1
测试:
[root@localhost script]# sh manu.sh
.[install lamp]
.[install lnmp]
.[exit]
pls input the num that you want: you choice
begin install lamp
/bin/sh: /server/scripts/test///install-lamp.sh: 没有那个文件或目录
lamp install error
[root@localhost script]# sh manu.sh
.[install lamp]
.[install lnmp]
.[exit]
pls input the num that you want: you choice
begin install lamp
/bin/sh: /server/scripts/test///install-lnmp.sh: 没有那个文件或目录
lnmp install error
[root@localhost script]# sh manu.sh
.[install lamp]
.[install lnmp]
.[exit]
pls input the num that you want: you choice
logout #由于真正的安装脚本没有开发所以每次执行安装都会报错没有文件或者目录,生产环境中将安装脚本写进去可实现一键化安装。
测试
部署方法2:
#!/bin/sh
menu ( ){ cat<<END
.[install lamp]
.[install lnmp]
.[exit]
pls input the num that you want:
END }
menu
read num
echo "you choice $num" function lamp(){
if [ "$num" -eq ]
then
echo "begin install lamp"
/bin/sh /server/scripts/test///install-lamp.sh
if [ $? -eq ]
then
echo "lamp is been install"
exit else
echo "lamp install error"
exit
fi
fi
} function lnmp(){
if [ "$num" -eq ]
then
echo "begin install lamp"
/bin/sh /server/scripts/test///install-lnmp.sh
if [ $? -eq ]
then
echo "lnmp is been install"
exit
else
echo "lnmp install error"
exit
fi
fi
}
function quit(){
if [ "$num" -eq ]
then
echo "logout..."
exit
fi
}
case $num in
)
lamp
;;
)
lnmp
;;
)
quit
;; *)
echo "USAG:start|stop|restart|status"
esac
部署方法2
测试:
[root@localhost script]# sh manu2.sh
.[install lamp]
.[install lnmp]
.[exit]
pls input the num that you want: you choice
begin install lamp
/bin/sh: /server/scripts/test///install-lamp.sh: 没有那个文件或目录
lamp install error
[root@localhost script]# sh manu2.sh
.[install lamp]
.[install lnmp]
.[exit]
pls input the num that you want: you choice
begin install lamp
/bin/sh: /server/scripts/test///install-lnmp.sh: 没有那个文件或目录
lnmp install error
[root@localhost script]# sh manu2.sh
.[install lamp]
.[install lnmp]
.[exit]
pls input the num that you want: you choice
logout...
[root@localhost script]# sh manu2.sh
.[install lamp]
.[install lnmp]
.[exit]
pls input the num that you want:
asdf
you choice asdf
USAG:start|stop|restart|status
方法2测试
经过测试方法2更为优雅,当然其实方法一也能实现方法2中输入错误给个提示。
三、编写一键化安装脚本:
1、LAMP安装这里以只安装apache为例子:
#!/bin/sh
#############################################
# this script is created by xuxuedong. #
# e_mail:@qq.com #
# qqinfo: #
# This install LAMP for auto. #
# version:1.1 #
#############################################
. /etc/init.d/functions
#set env
export PATH=$PATH:/bin:/sbin:/usr/sbin
export LANG="zh_CN.GB18030"
####define CMD and INstall_path
Instal_path=/application/
APP_PACKAGE_PATH=/home/tools
HTTP_RPM=`rpm -qa http*`
mkdir -p ${Instal_path}
if [ `$HTTP_RPM|wc -l` -gt ]
then
for n in $HTTP_RPM;do rpm -e --nodeps $n;done
else
echo "begin install LAMP."
fi
if [ ! -e ${APP_PACKAGE_PATH} ]
then
mkdir ${APP_PACKAGE_PATH}
else
yum install gcc* -y
cd ${APP_PACKAGE_PATH}
wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.2.32.tar.gz
fi if [ $? -eq ]
then
tar -zxf httpd-2.2..tar.gz
if [ $? -eq ]
then
cd httpd-2.2.
./configure --prefix=/application/apache.2.2. --enable-expires --enable-headers --enable-modules=most --enable-so --with-mpm=worker --enable-deflate --enable-rewrite
fi
if [ $? -eq ]
then
make
make install
fi
if [ $? -eq ]
then
ln -s /application/apache.2.2. /application/apache
fi
fi
以安装apache为例子
注明在第二项的一键化安装部署的部署脚本路径上/bin/sh /server/scripts/test///install-lamp.sh 给的是实际的脚本路径。
实际路径:
[root@localhost script]# ls | grep lamp
lamp.sh
[root@localhost script]# pwd
/server/script
所以需要将/bin/sh /server/scripts/test///install-lamp.sh修改成/bin/sh /server/script/lamp.sh
测试:

证明已经开始安装。
安装结果已经完成了apache的安装,剩下的mysql和php环境安装也可参考脚本:

备注:以上脚本可根据实际情况优化,例如:不需要在屏幕中输出,只在有报错是输出报错情况,安装完成输出安装成功即可。此部署脚步前期最好是能确定需要那些关联库,执行安装前最好是所有的安装环境已经准备好了。以上脚本只做为参考,部分需要根据实际情况开发脚本。劲量不要照搬。
自己开发shell脚本实现一键化安装。的更多相关文章
- 编写shell脚本实现一键创建KVM虚拟机
shell脚本一键创建虚拟机 代码如下: #!/bin/bashname=$1 #把位置变量$1重新定义为name(创建虚拟机的名字)path1=/var/lib/libvirt/images/ #i ...
- idea开发shell脚本并运行
参考:https://blog.csdn.net/u012443641/article/details/81295999 IEDA中的bashsupport插件支持在IDEA中编写shell脚本文件, ...
- shell脚本之nginx的安装
为了编写nginx自动部署的脚本而刚学习的shell脚本语言.写文章只是为了记录,有错误勿喷. 一.创建shell脚本程序 操作系统是Linux的 CentOS 7 版本. ...
- 写了shell脚本想一键启动三台虚拟机的Zookeeper,却不知道为啥总是启动不了
首先,一键启动的shell脚本是这样的 #! /bin/bash case $1 in "start"){ for i in node01 node02 node03 do ssh ...
- linux shell脚本使用结构化命令
内容: 一.if-then命令 二.if-then-else命令 三.test命令 四.case命令 1.if-then结构化命令中最基本的类型,其格式如下: if command then comm ...
- 【shell脚本】一键部署LNMP===deploy.sh
一键部署mysql,php,nginx,通过源码安装部署 #!/bin/bash # 一键部署 LNMP(源码安装版本) menu() { clear echo " ############ ...
- shell脚本之一键部署openV~P~N
提前准备:/root目录下: checkpsw.sh ## 官方提供的自定义脚本,可在http://openvpn.se/files/other/checkpsw.sh下载 openvpn@.serv ...
- shell脚本之结构化命令if...then...fi
if的用法日常主要用于数值或者字符串的比较来实现结构化的,模拟人脑,就是如果遇到什么事情,我们应该做什么 语法格式分为 1. if command;then command;fi (如果if满足 ...
- linux shell脚本使用结构化命令(2)
一.for命令 二.while命令 三.until命令 1.for命令基本格式 for var in list do commands done oracle@suse:~/testshell> ...
随机推荐
- git 合并子分支
1.子分支 $ git status 位于分支 base 无文件要提交,干净的工作区 2.子分支更新 $ git pull origin base 来自 http://106.14.59.204/ji ...
- 作业:xml练习2-写.xml的外部约束文件(dtd文件)
写外部DTD: 步骤: 1.在srd目录下新建DTD文件,并命名为:scores.dtd 2.在练习1的基础上,剪切练习1的DTD内部声明.粘贴到一个新建的DTD文件中.剪切之后的地方换上:包含外部D ...
- js中的命名空间
尽量不要使用全局变量,防止环境污染和命名冲突. 所以,将全局变量放在一个命名空间下,是一个好的解决方案. 静态命名空间 1. 直接赋值 这是最基本的方法,但是它很啰嗦,你得重复书写多次变量名.好处是它 ...
- easyui-tabs 在ie8下基于iframe嵌套页面加载成功后切换空白问题
这是一个很坑的问题,由于项目必须支持ie8的情况下,产生了这个问题.在我进行逐步对比的分析过后,终于发现了原因所在:
- 「NOI2015」「Codevs4621」软件包管理器(树链剖分
4621 [NOI2015]软件包管理器 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description Linux用户和OSX用户一定对 ...
- C++之运算符重载(前置++和后置++)
今天在阅读<google c++ 编程风格>的文档的时候,5.10. 前置自增和自减:有一句话引起了我的注意: 对于迭代器和其他模板对象使用前缀形式 (++i) 的自增, 自减运算符.,理 ...
- JAVA 中的堆和栈
栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.n ...
- vuex本地存储
vuex与localstorage 区别:vuex数据存储的内存,localstorage的数据存储在本地 应用场景:vuex用于组件之间的传值,localstorage用于不同页面之间的传值 永久性 ...
- c/c++面试30-38之指针
30 看代码写结果-----指针加减 #include <stdio.h> int main(void) { ] = { , , , , }; );//这里要特别注意,&a+1的值 ...
- PhpStorm插件之Translation
安装插件 File->Setting->Pluugins 搜索 Translation 如何使用 安装完插件后,RESTART IDE 快捷键 Ctrl+Shift+Y OR 选 ...