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' に一致する最初の行までのすべての行を出力します。" この例では、シェル スクリプトの「exit 0」より前のコンテンツを抽出します。$0
: は、現在実行中のスクリプト ファイルの名前を表す特別な変数です。${tmpfile_name}
sed -n -e '1,/^exit 0/!p' $0 > ${tmpfile_name} 2>/dev/null は、シェル スクリプトの 'exit 0' より前の内容を抽出し、一時ファイル中央に書き込むことを意味します。。また、発生したエラーは無視されます。
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/${インストールパス}' ${名前}/$configname
-i
: 端末や別のファイルに出力するのではなく、元のファイルに直接変更を加えます。'1i/${installpath}'
:1i
は最初の行の前に挿入することを意味し、${installpath}
その値が指定されたファイルに挿入される変数です。${name}/$configname
: これは、変更するファイルへのパスです。${name}
そして$configname
、その値がコンテキストに依存する変数でもあります。したがって、このコマンドの機能は、ファイルの最初の行の前に
${installpath}
config の値を挿入し、変更した内容を ${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