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之自己的脚本安装程序的更多相关文章

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

    但凡是学过Oracle的同学,对DBCA(Database Configuration Assistant, DBCA)都不会陌生,有了这个工具,使得创建数据库成为可能.而DBCA本身有图形和静默两种 ...

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

    Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...

  3. shell脚本--制作自己的服务脚本

    首先注意一下,我用的环境是centos6.5,中间有一些操作和在Ubuntu上有一些地方的操作是不同的, 编写脚本 首先看一个实例:假设有一个test的服务,可以通过命令对test进行启动.关闭或者重 ...

  4. 【Shell脚本编程系列】Shell脚本开发的习惯和规范

    1.开头指定脚本解释器 #!/bin/sh或#!/bin/bash 2.开头加版本版权信息 #Date #Author #Mail #Function #Version 提示:可配置vim编辑文件时自 ...

  5. 180807-Quick-Task 动态脚本支持框架之Groovy脚本加载执行

    Quick-Task 动态脚本支持框架之Groovy脚本加载执行 上一篇简答说了如何判断有任务动态添加.删除或更新,归于一点就是监听文件的变化,判断目录下的Groovy文件是否有新增删除和改变,从而判 ...

  6. linux,shell脚本中获取脚本的名字,使用脚本的名字。

    需求描述: 写shell脚本的过程中,有时会需要获取脚本的名字,比如,有的时候,脚本 中会有usage()这种函数,可能就会用到脚本的名字. 实现方法: shell脚本中,通过使用$0就可以获取到脚本 ...

  7. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

  8. Linux脚本中调用SQL,RMAN脚本

    Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...

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

    Linux(centos 6.5) 调用java脚本以及定时运行的脚本实例 一.调用java程序脚本(默认已经搭建好了Java环境) 1.jdk 安装路径 /usr/jdk/jdk1.7/-- 2.j ...

  10. 【在 Nervos CKB 上做开发】Nervos CKB脚本编程简介[2]:脚本基础

    CKB脚本编程简介[2]:脚本基础 原文作者:Xuejie 原文链接:Introduction to CKB Script Programming 2: Script 本文译者:Shooter,Jas ...

随机推荐

  1. 关于bat的变量赋值和解析机制

    以下的演示涉及几个知识点: 1. 怎样把命令输出内容保存到变量中? 2. 多次改变变量值,为什么在for或是if的()中的无效,怎样变通? 3. bat的function实现? 见代码,和代码凝视 : ...

  2. Kali Linux下安装VMware Tools

    引言 Kali Linux是基于Debian的Linux发行版, 设计用于数字取证和渗透測试.安装Kali Linux非常easy,可是安装VMware Tools的过程就有点麻烦了,由于在安装中途会 ...

  3. CSS布局篇——固宽、变宽、固宽+变宽

    学了前端挺久了.近期写一个项目測试系统,布局时发现自己对变宽+固宽的布局还没有全然掌握,所以在这里总结一下,以后须要的时候回头看看. 1.最简单的当然是一列或多列固宽 比如两列固宽: <1> ...

  4. jquery init 关系

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/st ...

  5. resource-color 的引用

    1.在xml文件中引用 android:textColor="@color/tv_top_title_color" 2.在代码中引用 1)在color.xml中定义 <?xm ...

  6. android图像处理系列之五--给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

  7. 用jersey写 java restfull web services 输出xml格式数据

    1 logic package com.toic.rest; import com.toic.model.Folder; import java.util.logging.Logger; import ...

  8. POJ 1738 An old Stone Game(石子合并 经典)

    An old Stone Game Time Limit: 5000MS   Memory Limit: 30000K Total Submissions: 3672   Accepted: 1035 ...

  9. Linux shell command学习笔记(二)

    <cut> 作用:从输入文件或者命令的输出中析取出各种域 用法:cut –c{字符串范围} –d{字段间分割符} –f{字段索引编号} 举例: (1)查看在线用户:who | cut –c ...

  10. 淺談Unity 5.4新功能:Light Probe Proxy Volume

    作者:CHRISTOPHER POPE 原文連結 Unity 5.4進入到Beta的階段.当中一個特別的功能是光照探頭代理Light Probe Proxy Volume(LPPV).本篇會向大家介紹 ...