你的位置:首页 > 操作系统

[操作系统]shell脚本结构示例1


2013年以来自己因为偷懒,少写了很多东西,今年计划把以前积累的总结出来。

先从shell开始写起吧。

 

干了快3年游戏运维,期间经常会写一些shell本,不少脚本其实有很多可以复用的部分。

按照自己的风格,如果是比较重要的脚本,脚本内容可以分为3部分:输入部分、核心逻辑部分、输出部分。

本文主要介绍输入部分。

通常在现网运行的脚本,为了防止勿执行,最好带上参数,例如:

test.sh -w 1

而带参数的脚本写法如下,注释部分按个人风格书写即可:

#!/bin/bash
# creat by fank 2016-01-01
echo "===`date +"%F %T"`=="

while getopts w: opt;docase $opt in w) w_list=${OPTARG};; ?) usage;;esacdone

usage(){
echo "$0 -w [check_list]"
echo "$0 -w \"27-30\""
echo "$0 -w \"2,3,4\""
exit 1
}



echo $w_list

 

完成了带参数的输入,接下来可以进行参数解析或检查等操作。

实际过程中也经常可能遇到参数扩展的情况,比如输入-w '1-10',如何在脚本中把这个保存为一个包含1-10的数组呢:

function check_input(){ [[ -z $w_list ]]&& usage w_list=${w_list//-/..} w_tmp="echo {$w_list}" list=$(eval $w_tmp) list=$(echo $list|awk -F'{|}| ' '{for(i=1;i<=NF;i++)print $i }'|xargs) for i in $list;do [[ $((i+0)) != $i ]] && tms_fail "Input worldID must be a number!" done echo "World set list is as follows:" echo $list echo "=="}

在上面的代码中,对w_list变量(字符串)先进行了一次替换 

 w_list=${w_list//-/..}

然后利用花括号扩展产生一个序列保存在新变量中

 w_tmp="echo {$w_list}" list=$(eval $w_tmp)

其实这句代码,对-w '1,2,3' 这种输入也适用。