1、定义一些名称和变量
name=name #定义名称
unshname=uninstall${name}.sh #卸载脚本文件的功能
appname=appname
installpath=/opt/${name} #安装的路径,并且给被安装的文件命名
2、检查是否存在一个名为$unshname ,如果存在,则执行该文件以卸载旧版本的软件
if [ -f "/usr/bin/$unshname" ];then
echo "=========== 卸载旧版本软件 ============="
/usr/bin/$unshname
echo "====================================="
echo ""
fi
3、将压缩包当中的安装文件提取到临时文件中。
-n
: 只输出经过编辑的行。-e
: 紧跟着的参数是要执行的sed脚本。'1,/^exit 0/!p'
: "从第一行开始到第一个匹配'^exit 0'的行之前的所有行都打印出来"。在这个例子中,它的作用是提取Shell脚本中'exit 0'之前的内容。$0
: 是一个特殊变量,表示当前正在运行的脚本文件的名称。- sed -n -e '1,/^exit 0/!p' $0 > ${tmpfile_name} 2>/dev/null的意思将Shell脚本中'exit 0'之前的内容提取出来,并写入一个临时文件
${tmpfile_name}
中。同时,它将忽略任何发生的错误。
tmpfile_name=/tmp/${name}.tgz #定义了临时文件
echo -e "\t #准备安装软件
#从当前脚本中分离出压缩包部分,写入到临时文件${tmpfile_name}
sed -n -e '1,/^exit 0/!p' $0 > ${tmpfile_name} 2>/dev/null
tar xzf ${tmpfile_name} -C /tmp #解压压缩包
rm -rf ${tmpfile_name} #删除压缩包
cd /tmp #切换到放置压缩包的目录中
4、检查是否存在路径$installpath
,如果不存在,则创建该路径
if [ ! -d $installpath ] ;then
mkdir -p $installpath
fi
5、安装库文件和工具文件
sed -i '1i/${installpath}' ${name}/$configname
-i
: 直接在原始文件中进行修改,而不是输出到终端或另一个文件。'1i/${installpath}'
:1i
表示在第一行之前插入,${installpath}
是一个变量,它的值将被插入到指定文件中。${name}/$configname
: 这是要进行修改的文件路径。${name}
和$configname
也是变量,其具体值会根据上下文而定。所以,这个命令的作用是将
${installpath}
的值插入到${name}/$configname
文件的第一行之前,并将修改后的内容保存回${name}/$configname中。
echo -e "\t 安装库文件和工具软件"
configname=${name}.conf #配置文件的名称
touch ${name}/$configname #创建一个空的配置文件
sed -i '1i/${installpath}' ${name}/$configname #将前面文件的内容输入到第二个文件的第一行前面
cp ${name}/$configname /etc/ld.so.conf.d/ #将配置文件复制到/etc/ld.so.conf.d/目录
sed -i '1i/${installpath}' ${name}/$configname
cp ${name}/$configname /etc/ld.so.conf.d/
ldconfig #ldconfig命令重新加载库文件
cp -r ${name}/* $installpath #将${name}文件夹的所有文件复制到${installpath}。
6、删除临时文件夹${name},输出“安装完成
”
rm -rf ${name}
echo -e "\t 安装完成"
exit 0