Bash玩转脚本1之自己的脚本安装程序

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: [email protected]
    ‘‘‘
}

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

本文遵循“署名-非商业用途-保持一致”创作公用协议

时间: 2024-10-15 19:24:18

Bash玩转脚本1之自己的脚本安装程序的相关文章

Bash玩转脚本4之搞一套完整的Android反编译与分包工具

一.前言 正在搞IOS的微信支付和支付宝支付,焦头烂额之时,天上掉下来一个Android分包工具的需求,觉得还蛮有意思,其实之前一直想搞一个类似的东西,正好趁着这次机会实践一下. [原文地址] (http://blog.csdn.net/yang8456211/article/details/52513354 ) (先说清楚需求,这个分包工具要干什么) 从产品角度 拿到一个apk安装包,然后用这个包去生成n个包,这n个包需要有特定的标示,能够根据包的标示去收集信息,而且这个n个包彼此不能覆盖安装

Bash玩转脚本3之几个指令有趣的筛选京东评价

Bash玩转脚本3之几个指令有趣的筛选京东评价 今天在工作中遇到了一个筛选和去重问题,饶有兴致祭出Mac(为了跟公司同步,写Android一直用Win-),三两个指令搞定了去重复筛选问题,回到家中意犹未尽,决定总结一下这些年使用bash做数据筛选和去重的经验. 传送门: Bash玩转脚本文章系列 一.数据 找数据是个头疼的问题,不过在百度过程中缺找到了一个蛮好的网站,推荐给大家http://www.datatang.com/,我从中下载了一个京东手机评价的数据,随便找了一组数据,命名为data.

Linux学习笔记:bash特性之多命令执行,shell脚本

今天我们学习了bash特性多命令执行包括各个命令之间的逻辑关系.其中包含"与""或""非"命令的执行.下面即为我们所学习的这些逻辑命令关系之间的关系. 选择执行结构: 逻辑运算: 与:逻辑乘法,&& 0:成功执行 -->true 1-255:失败 -->false true && true =true true && false = false false && true

linux下Bash编程循环语句特殊用法之编写脚本(十)

linux下Bash编程while语句特殊用法之编写脚本(十) 1.循环控制: break:中断整个循环语句,即退出循环后执行脚本后面的语句 continue:中断当前本次循环,提前进入下一轮循环 exit:结束脚本运行 2.while死循环,即当不知道循环多少次时 格式 : while :; do 循环语句 done 3.while从输入重定向文件中每行读取并赋值给read变量 格式:  while read LINE;do 循环语句 done < 路径文件 4.实例脚本 4.1.找出/etc

转 Oracle DBCA高级玩法:从模板选择、脚本调用到多租户

但凡是学过Oracle的同学,对DBCA(Database Configuration Assistant, DBCA)都不会陌生,有了这个工具,使得创建数据库成为可能.而DBCA本身有图形和静默两种方式.其中静默方式看起来高大上一些,因为一个看似复杂的创建数据库的过程,用一个命令就可以轻松搞定.静默安装的命令类似下面的形式,其中创建的数据库为testdb,字符集为ZHS16GBK. dbca -silent -createDatabase -templateName $ORACLE_HOME/

shell脚本:lnmp等源码安装脚本

##脚本功能: # 源码安装dns.nginx.php.memcached.gonet.mysql,并做相关的配置 # ##脚本说明: # ##更新记录: # 1.增加dns.nginx的配置文件 # 2.优化mysql.nginx.dns等安装的部分函数 # 3.增加安装gonet服务的功能函数 -------------------------- #!/bin/bash # by colin on 2016-01-06 # revision on 2016-04-29 ###########

Linux/Unix shell 脚本中调用SQL,RMAN脚本

Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可少的技能之一.本文针对Linux/Unix shell脚本调用sql, rman 脚本给出了相关示例. 一.由shell脚本调用sql,rman脚本 [python] view plain copy print? 1.shell脚本调用sql脚本 #首先编辑sql文件 [email protecte

Linux(centos 6.5) 调用java脚本以及定时运行的脚本实例及配置文件具体解释

Linux(centos 6.5) 调用java脚本以及定时运行的脚本实例 一.调用java程序脚本(默认已经搭建好了Java环境) 1.jdk 安装路径 /usr/jdk/jdk1.7/-- 2.java 程序路径 /usr/jdk 3.类名:Test.java(有主函数的类名) 4.调用java类的脚本,注意脚本的后缀是.sh 5.脚本内容: (1)#! /bin/bash // #! 特殊符号.说明这个脚本是由/bin 文件夹下的bash这个shell来解释并将解释后的内容给kernel来

20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量

- 20.1 shell脚本介绍 - 20.2 shell脚本结构和执行 - 20.3 date命令用法 - 20.4 shell脚本中的变量 # 20.1 Shell脚本介绍 -  shell是一种脚本语言  关注aming_linux  blog.lishiming.net -  可以使用逻辑判断.循环等语法 -  可以自定义函数 -  shell是系统命令的集合 -  shell脚本可以实现自动化运维,能大大增加我们的运维效率 # 20.2 Shell脚本结构和执行 - 开头需要加#!/b

一个脚本就能明白Shell 脚本中的位置参数的含义

#!/bin/bashecho '$0 获取当前执行的Shell脚本文件名: ' "$0"echo '$n 获取当前执行的Shell脚本的第n个参数值,n=1..9 ' '$1'=$1,'$2'=$2,'$3'=$3echo '$ 获取当前Shell的所有参数 $1 $2 $3 ...注意与[email protected]的区别:' $echo '$# 获取当前Shell命令行中的参数总个数:' $#echo '$$ 获取当前Shell的进程号(PID): '$$sleep 3 &a