shell脚本--创建bin可执⾏⽂件
⾸先,我们需要了解做这件事的⽬的是什么。
如果现在我们有⼀个shell脚本写的bin⽂件(⽂件名myhello),这个⽂件⾥⾯的内容为:打印hello world,那么我们直接拿过来执⾏即可(sh myhello),或者将这个⽂件放到/bin/⽬录下,随便哪个⽬录输⼊myhello即可。现在的情况就是,我只提供⼀个bin⽂件给你,这个⽂件中有安装脚本还有⼆进制⽂件内容(打开是乱码),⽂件前⾯是安装脚本后⾯是安装包内容,在程序运⾏过程中,会将⼆进制⽂件内容打包为⼀个压缩⽂件,然后解压拿到内容,然后处理完业务,最后可以将其删除。这样做的好处就是,我不会直接提供给你安装⽂件,我只提供bin⽂件给你。
接下来,就来看这个bin⽂件的制作过程。
(1)写⼀个⽂件hello,输出hello world,这个就是我们的⼆进制⽂件,可以是shell编写的,也可以是Python编写的
#!/bin/bash
# 打印hello world
echo ""
(2)将⽂件hello打包,或者tar.bz2都⾏
打包和解压可以参考以下命令,这⾥提供⼀下,防⽌有的⼈忘了。
1. 打包压缩
tar -zcvf pack/  #打包压缩为⼀个.gz格式的压缩包
tar -jcvf pack.tar.bz2 pack/ #打包压缩为⼀个.bz2格式的压缩包
tar -Jcvf pack/  #打包压缩为⼀个.xz格式的压缩包
2. 解包解压
tar -zxvf /pack  #解包解压.gz格式的压缩包到pack⽂件夹
tar -jxvf pack.tar.bz2 /pack #解包解压.bz2格式的压缩包到pack⽂件夹
tar -Jxvf /pack  #解包解压.xz格式的压缩包到pack⽂件夹
这⾥选择的格式打包
tar -zcvf hello
打包好后,这就是⼀个⼆进制的安装⽂件。
(3)接下来,我们写⼀个安装脚本install_hello.sh,⽤来安装这个⽂件的。
#!/bin/bash
install_dir=/tmp/hello
if [ -d "$install_dir" ];then
rm -rf "$install_dir"
mkdir "$install_dir"
else
mkdir "$install_dir"
fi
sed -n '1,/^exit 0$/!p' $0 > $install_dir/
shell创建文件并写入内容
cd $install_dir
tar -zxvf
exit 0
这个安装脚本的内容是,创建⼀个安装⽬录,然后将该⽂件的“exit 0”以后的内容输出到安装⽬录下的⼀个压缩⽂件中,这个会⾃动创建,然后cd到安装⽬录,将安装⽂件的压缩包解压,解压后⾥⾯的内容你想怎么⽤就怎么⽤了。显然,该安装脚本exit 0后⾯没有内容,因此,这个⽂件我们先写好,不⽤执⾏。
注意:sed -n '1,/^exit 0$/!p' $0 > $install_dir/,这句话可能有点难理解,意思就是当前⽂件中除了第⼀⾏和exit 0所在⾏中间的部分,也就是exit 0后⾯的内容,输出到$install_dir/⽂件中。$0是当前脚本的名,也就是install_hello.sh。
(4)制作bin⽂件,其实就是将安装脚本的内容和安装⽂件压缩包的内容拼接在⼀起,新⽣成⼀个⽂件myinstall.bin,这个⽂件的内容为:前⾯是安装脚本install_hello.sh的内容,后⾯是安装⽂件压缩包的内容。这样⼀来,myinstall.bin⽂件的exit 0后⾯就有内容了,就是安装⽂件压缩包hello.t
<的内容。
cat install_hello.sh > myinstall.bin
⾄此,bin⽂件已经制作完成,可以直接运⾏sh myinstall.bin。运⾏完后,我们在安装⽬录/tmp/hello下⾯就会看到由解压得到的hello。可以拿hello⾥⾯的内容处理业务,这个⾥⾯不⼀定⾮要是⼀个可以运⾏的脚本,可以是任何⽂件。
注意:sed -n '1,/^exit 0$/!p' $0 > $install_dir/中的,这个名字随便取,可以跟原来的安装⽂件压缩包不⼀样。⼀般都写成⼀样的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。