Bash玩转脚本1之自己的脚本安装程序
2017-08-20 17:52
519 查看
Bash之打造自己的脚本安装器
前言还是理所当然的前言,我一直想找一套管理脚本的“框架”,能让自己杂乱的脚本有点规整。无奈眼界尚浅,未能找到。
因此萌生自己写一点优化脚本的工具来。新手可学习。高手请指正。今天先写一个脚本的安装器,目的在于写完并新脚本之后能够在shell的不论什么位置都能够便捷使用。
安装器干了啥?
一、配置文件
config.ini主要用于配置两个文件夹。
脚本的读取文件夹
生成软链接的存放文件夹
二、读取脚本
递归遍历读取scriptPath文件夹下的脚本文件,排除掉install.sh和config.ini。
do_file() { for file in $1/* do if [[ -d "$file" ]]; then do_file "$file" else basename=`basename $file` if [[ ! $basename == "install.sh" && ! $basename == "config.ini" ]];then link_file $file fi fi done }
三、创建软链接
为每个脚本在binPath文件夹下创建软链接,假设之前存在则会首先删除掉。并对软链接加上运行权限(这里直接加了777)
link_file() { filePath=$1 fileName=`basename $1` linkName=${fileName%.*} linkPath=$binPath"/"$linkName if [[ -L $linkPath ]];then echo "===>(warn):"$linkPath" is exist,remove it!" rm $linkPath fi ln -s $filePath $linkPath echo "===>(info):link file "$filePath" -----> "$linkName" successful!" chmod 777 $linkPath }
四、配置环境变量
把binPath文件夹加入到环境变量中(~/.bash_profile)。这样就能够随时的訪问脚本了~
add_profile() { isIn=`cat ~/.bash_profile | grep $1` echo_test "isIn is "$isIn if [[ x"$isIn" == x ]];then echo "\n#Setting PATH FOR LOCAL SCRIPT" >> ~/.bash_profile echo "export PATH=\"$1:\${PATH}\"" >> ~/.bash_profile echo "===>(info)"$binPath" is added to bash_profile successful!" export PATH=$1:${PATH} else echo "===>(info)"$binPath" is already in the bash_profile!<SKIP>" fi }
尝试
每次新加的脚本便能够放在scriptPath文件夹,运行install.sh之后便会在binPath里面生成相应的软链接。然后就能够在终端中自由的使用了~1.能够看到,我的文件夹以下有五个文件(包含安装脚本的配置文件)
2.运行sh install.sh run 之后
3.在binPath文件夹下生成了三个软链接~
4.并在~/.bash_profile里生成了相应的Path
5.能够看到我们在Shell的不论什么位置已经能够是用自己编写的脚本指令了~(比如pyversion。是自己写的一个改动本地python版本号的小脚本)
6.完整代码:
#!/bin/bash
# 读取config.ini
source ./config.ini
isTest=$isTest
binPath=$binPath
scriptPath=$scriptPath
editor(){
echo '''
@auther: 杨光
@blog: http://blog.csdn.net/yang8456211 @email: 347702498@qq.com
'''
}
help_fun(){
cat << ENTER
============= 脚本安装工具 =============
Version: 0.1
Date: 20160330
Usage: 用作初始安装自己的脚本环境
e.g.: sh install.sh run
============= 脚本安装工具 =============
ENTER
}
echo_emp(){
echo -e "\033[31m"$1"\033[0m"
}
echo_test(){
[[ $isTest == true ]] && echo $1
}
exit_pro(){
echo "==用户退出== Abort(1)"
exit 1
}
link_file() { filePath=$1 fileName=`basename $1` linkName=${fileName%.*} linkPath=$binPath"/"$linkName if [[ -L $linkPath ]];then echo "===>(warn):"$linkPath" is exist,remove it!" rm $linkPath fi ln -s $filePath $linkPath echo "===>(info):link file "$filePath" -----> "$linkName" successful!" chmod 777 $linkPath }
do_file() { for file in $1/* do if [[ -d "$file" ]]; then do_file "$file" else basename=`basename $file` if [[ ! $basename == "install.sh" && ! $basename == "config.ini" ]];then link_file $file fi fi done }
add_profile()
{
isIn=`cat ~/.bash_profile | grep $1`
echo_test "isIn is "$isIn
if [[ x"$isIn" == x ]];then
echo "\n#Setting PATH FOR LOCAL SCRIPT" >> ~/.bash_profile
echo "export PATH=\"$1:\${PATH}\"" >> ~/.bash_profile
echo "===>(info)"$binPath" is added to bash_profile successful!"
export PATH=$1:${PATH} #仅仅是加到了内存中,新开终端失效
else
echo "===>(info)"$binPath" is already in the bash_profile!<SKIP>"
fi
}
if [[ $# != 1 || $1 != "run" ]];then
help_fun
editor
exit 2
fi
echo "是否对"$scriptPath"文件夹下的脚本进行安装?"
echo "安装文件夹为:"$binPath"(y/n)"
read
if [[ $REPLY == "y" || $REPLY == "Y" ]];then
do_file $scriptPath
add_profile $binPath
echo "脚本环境成功安装!!"
else
echo "用户终止exit (Abort)"
exit 0
fi
杨光(atany)原创,转载请注明博主与博文链接,未经博主同意,禁止不论什么商业用途。
博客地址:http://blog.csdn.net/yang8456211
博文地址:http://blog.csdn.net/yang8456211/article/details/51020797
本文遵循“署名-非商业用途-保持一致”创作公用协议
相关文章推荐
- Bash玩转脚本1之自己的脚本安装程序
- Bash玩转脚本2之自己的脚本管理工具
- 玩转Bash脚本:test测试语句
- Cron 的在ubuntu 定时执行自己的程序&& Python获取当前 脚本文件的路径。
- 自己编写脚本, 让DB2 的命令行安装变得更轻松
- 自己制作程序安装文件
- 自己动手:bash脚本工具统计git历史, 发掘谷歌在Android项目奥秘
- 制作自己写的arcgis desktop工具栏的安装程序
- 在自己的程序中加入脚本支持(一)
- 在fedora20下面手动为自己的安装程序创建桌面图标
- 如何给自己的PHP项目制作安装程序
- NSIS脚本定制安装程序包
- 玩转Bash脚本:循环结构之while循环(转)
- php 如何写一个自己项目的安装程序
- 用NSIS创建自己的windows安装程序制作程序
- ecshop安装程序源码阅读-安装脚本(2)
- 在自己的程序中加入脚本支持(二)
- 安装自己的易程序到其它计算机的方案
- 自己动手编写devExpress组件自动安装程序
- asp.net网站打包(包含数据库建库脚本 oracle) 成安装程序 exe 或msi