1. 程式人生 > >將多個文件打包成一個shell

將多個文件打包成一個shell

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.gzinstall.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.gzinstall.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