找回密码
 立即注册

QQ登录

只需一步,快速开始

本日痛下刻意,把事件的工作肯定要利用平台来做,时间短,使命紧,之前的运维开辟是铺了一个面,每个面都做一些相干的事变,以是工作团体看都有希望,但是末了没有一个专注的功能。
以是我就在想到底是怎么回事,我能不能专注一些,哪怕就实现一个简朴的功能,把它做好做透,其他的功能是不是可以或许同样复制许多的头脑。于是乎,上班后我开始整理本身的思绪,一边问本身,一边答复,每个答复都对应两列,一个是必要做的改进(action),另有一个是这个action的预估时间。效果几分钟下来,我发现假如抱负的环境下,我只必要2个小时就能搞定,这么一想,照旧能担当的,于是对必要做的事变排了一个次序,立马开干。
BwjmvNqNXwqV9hH9.jpg
我的计划是利用运维平台毗连中控服务器来级联触发长途操纵,如许运维平台对全部情况的耦合性是最低的。
哪怕是最大略的操纵,也要咬着牙完成,于是大要是如许的流程,上午的时间有两个摆设需求,下战书有两个,第一个是在半调试状态下完成的,第二个开始做脚本的模块化整理,是一个半主动的过程,然后发现了一些题目,非常纠结的去修复汗青摆设题目,比及第三个需求的时间,显着好了很多,到了第四个,就可以一口吻完成了,流程买通了,细节就可以打磨了。
于是我对有的脚本的逻辑举行改造,有一个很通用的需求,假设脚本是initdb.sh要调用这个脚本必要输入一系列的参数,好比有5个参数。
这个脚本内里有10个步调,每个步调都是利用function来实现的。假如要处置惩罚这5个参数,同时可以或许控制10个步调的实行,好比第2步不实行,第3步实行。脚本中实在照旧比力难以管理和实现的。
我假想了几种实现思绪:
1)把10个步调拆分成10个脚本,然后每个脚本都有本身的调用方式,独立控制
2)写一个设置脚本,好比main.sh然后在这个脚本里控制initdb.sh的实行环境
第二种看起来好一些,但是题目照旧没有办理,由于参数怎么管理,10个步调怎么处置惩罚照旧得细化。
我的开端假想是5个参数,外带一个参数即可,前面五个参数和一个步调的参数。
预期实行环境大要如下:
# sh a.sh x x x x x 'init1 init3 init2'
init1
init3
init2
即实行的时间是按照init1 init3 init2的方式实行的。
关键代码如下:
function init1(){
echo 'init1'
}
function init2(){
echo 'init2'
}
function init3(){
echo 'init3'
}
function initdb(){
arr=$1
for fun in ${arr
  • }; do
    echo $i
    case $fun in
    init1)
    echo "test init1"
    init1
    ;;
    init2)
    echo "test init2"
    init2
    ;;
    init3)
    echo "test init3"
    init3
    ;;
    *)
    echo "out of scope"
    esac
    done
    }
    init_par=$1
    actions=($init_par)
    initdb "${actions
  • }"
    实行效果如下:
    [root@dev01 test]# sh a.sh 'init1 init3 init2'
    test init1
    init1
    test init3
    init3
    test init2
    init2
    这里有个题目,那就是我们输入的操纵步调大概是无序的,但是实行的时间是盼望按照次序,好比步调2是依靠于步调1的,这个我们是明白的。假如要实现如许一个需求,就必要额外的一些增补,那就是排序功能,大概是前端传入的时间来控制更好。
    没事,能者多劳,我们就先实现了。包管能精确的运行起来,于是代码又开始一通改动。
    function init1(){
    echo 'init1'
    }
    function init2(){
    echo 'init2'
    }
    function init3(){
    echo 'init3'
    }
    function initdb(){
    arr=$1
    complete_arr=(init3 init1 init2)
    order_arr=()
    for act_tmp in ${complete_arr
  • }; do
    if [[ " ${arr[@]} " =~ " $act_tmp " ]];then
    echo $act_tmp
    order_arr[${#order_arr[@]}]=$act_tmp
    echo order_arr[${#order_arr[@]}]
    fi
    done
    for fun in ${order_arr
  • }; do
    echo $i
    case $fun in
    init1)
    echo "test init1"
    init1
    ;;
    init2)
    echo "test init2"
    init2
    ;;
    init3)
    echo "test init3"
    init3
    ;;
    *)
    echo "out of scope"
    esac
    done
    }
    init_par=$1
    actions=($init_par)
    initdb "${actions
  • }"
    假设精确的步调我们改为了init3 init1 init2,传入参数为init1 init3 init2,假如可以或许转换,幸福感就大大进步了。
    脚本的实行效果如下:
    [root@dev01 test]# sh aa.sh 'init1 init3 init2'
    init3
    order_arr[1]
    init1
    order_arr[2]
    init2
    order_arr[3]
    test init3
    init3
    test init1
    init1
    test init2
    init2
    可见是到达了预期的目的了,以是这个思绪可以鉴戒,在其他的地方也可以参考利用。
  • 分享至 : QQ空间
    收藏

    3 个回复

    倒序浏览
    字写得太好了,向您致敬!!!
    回复 使用道具 举报
    zcn 秀才 2018-5-7 08:54:07
    板凳
    现在用引流脚本的人多不
    回复 使用道具 举报
    1688 秀才 2018-5-11 07:42:16
    地板
    引流其实是一门很深的学问
    回复 使用道具 举报
    您需要登录后才可以回帖 登录 | 立即注册