标签:shell脚本
1. 脚本目的实现自动化环境部署,且将软件包和部署脚本合并成一个文件,避免脚本和文件分开。
2. 实验环境
(1) Linux环境
centos 7.4
(2) 软件包
[root@centos-70 0517]# tar -tf apache_2.4.29.tar.gz # 以自动化安装apache为例
apr-1.6.3.tar.gz
apr-util-1.6.1.tar.gz
httpd-2.4.29.tar.gz
(3) 安装脚本
[root@centos-70 0517]# ll install.sh # 该脚本实现对apache_2.4.29.tar.gz解压和httpd环境部署
-rw-r--r-- 1 root root 2958 May 17 12:03 install.sh
(4) 打包脚本
[root@centos-70 0517]# cat package.sh # 将apache_2.4.29.tar.gz和install.sh合并成一个文件
#!/bin/bash
SCRIPT_SIZE=$(stat -c %s $2)
PACK_SIZE=$(stat -c %s $3)
echo '#!/bin/bash'>/tmp/compress.sh
echo "dd if=$1 of=$3 bs=1 count=$PACK_SIZE skip=$[SCRIPT_SIZE+100]" >> /tmp/compress.sh
COM_SIZE=$(stat -c %s /tmp/compress.sh)
if [ $COM_SIZE -ne 100 ];then
sed -i "2d" /tmp/compress.sh
echo "dd if=$1 of=$3 bs=1 count=$PACK_SIZE skip=$[SCRIPT_SIZE+COM_SIZE]" >> /tmp/compress.sh
COM_SIZE_NEW=$(stat -c %s /tmp/compress.sh)
if [ $COM_SIZE -lt $COM_SIZE_NEW ];then
sed -i "2d" /tmp/compress.sh
echo "dd if=$1 of=$3 bs=1 count=$PACK_SIZE skip=$[SCRIPT_SIZE+COM_SIZE-1]" >> /tmp/compress.sh
elif [ $COM_SIZE -gt $COM_SIZE_NEW ];then
sed -i "2d" /tmp/compress.sh
echo "dd if=$1 of=$3 bs=1 count=$PACK_SIZE skip=$[SCRIPT_SIZE+COM_SIZE+1]" >> /tmp/compress.sh
fi
COM_SIZE=$(stat -c %s /tmp/compress.sh)
fi
dd if=/tmp/compress.sh of=$1 count=$COM_SIZE bs=1 >/dev/null
dd if=$2 of=$1 count=$SCRIPT_SIZE bs=1 seek=$COM_SIZE >/dev/null
dd if=$3 of=$1 count=$PACK_SIZE bs=1 seek=$[COM_SIZE+SCRIPT_SIZE] >/dev/null
3. 测试
(1) 合并apache_2.4.29.tar.gz和install.sh
[root@centos-70 0517]# ll
total 10020
-rw-r--r-- 1 root root 10251674 May 17 11:11 apache_2.4.29.tar.gz
-rw-r--r-- 1 root root 2958 May 17 12:03 install.sh
-rw-r--r-- 1 root root 1070 May 17 12:45 package.sh
[root@centos-70 0517]# bash package.sh apache_2.4.29.tar.sh install.sh apache_2.4.29.tar.gz # 注意参数顺序
[root@centos-70 0517]# ll
total 20036
-rw-r--r-- 1 root root 10251674 May 17 11:11 apache_2.4.29.tar.gz
-rw-r--r-- 1 root root 10254726 May 18 00:39 apache_2.4.29.tar.sh
-rw-r--r-- 1 root root 2958 May 17 12:03 install.sh
-rw-r--r-- 1 root root 1070 May 17 12:45 package.sh
(2) 查看apache_2.4.29.tar.sh内容(建议使用vim或者下载到win上用sublime text等文本编辑器查看)
该文件有三部分组成:
(a) 解压部分
#!/bin/bash
dd if=apache_2.4.29.tar.sh of=apache_2.4.29.tar.gz bs=1 count=10251674 skip=3052
(b) install.sh部分
(c) 乱码部分(该部分为apache_2.4.29.tar.gz)
(3) 在服务器上执行apache_2.4.29.tar.sh
[root@centos-71 ~]# bash apache_2.4.29.tar.sh
[root@centos-71 ~]# /usr/local/apache/bin/apachectl start
[root@centos-71 ~]# curl 127.0.0.1
<html><body><h1>It works!</h1></body></html>
4. 补充
(1) 重点是package.sh脚本,install.sh 和 apache_2.4.29.tar.gz可以根据随意调整。
(2) 打包完成后的apache_2.4.29.tar.sh 不能随意修改,改动任意字符都可能会导致脚本出错。
标签:shell脚本
原文地址:http://blog.51cto.com/11879548/2127843