shell脚本结构示例

shell脚本结构示例1

Posted on 2016-01-12 18:35 meteorcan 阅读( 56) 评论( 0) 编辑 收藏

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;do
case $opt in
 w) w_list=${OPTARG};;
 ?) usage;;
esac
done

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' 这种输入也适用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值