粗谈shell脚本风格
注意:此风格并非官方版本,为个人在编写和维护脚本程序时总结出来的民间版本。
0. 开头:
除去开头的#!/bin/bash,最前面的就是脚本描述注释了,视个人喜好而定,例如:
###############################################################
# author :skyline
# args :name => 名称,age => 年龄(optional) ...
# desc :这是这个脚本的描述,
# charactor:UTF-
# note :email => skyline1225@.com,(TODO something have not done)
###############################################################
......
1.初始化参数和环境变量
这一步主要对环境变量和参数进行初始化,还有对环境的设置,例如:
set -e
DIR=`pwd`
LOG=$DIR/test.log
NAME=$
WORKSPACE=/home/$NAME
一般声明常量都用大写,变量小写,这个不用多说
2.参数检查
在初始化参数和环境后,就是检查,如果有问题就打印log退出或者提示退出
help()
{
cat << HELP
Usage:./test.sh [name]
this script is to print name
h,--help display this help and exit HELP
exit
}
[ "$1" = "h" -o "$1" = "--help" -o ! $# -eq ] && help
或者
echo "test args..."
test "$name" != "" && echo "name is right,continue" || (echo "name is wrong:$age,exit" && exit )
test "$age" != "" && echo "age is right,continue" || (echo "age is wrong:$age,exit" && exit )
test "$WORKSPCE" != "" && echo "age is right,continue" || (echo "age is wrong:$age,exit" && WORKSPCE=/home/$name)
如果脚本是人为执行的,那么倾向前一种,将提示信息写得越全越友好,如果可以实现标准化的参数标志就更好了;
本人做的工作中脚本大都是自动由程序调用,因此用后面那种较多,打印信息完整,而且修改时打印可以当注释用,尽量简短,一般3~5个单词,整行保持一个屏幕宽度内。
3.完成实际工作
通常我写脚本会控制大小,9-10号字体,一张A4纸大小,鼠标滚轮一下滚到底,最多不超过100行,最多嵌套3层。如果要超过,说明有些功能可以分离出去了。
通常脚本大体功能为循环结构,顺序结构或者分支结构。
循环结构不用说,直接for或者while
for (( i = ; i < ; i++ )); do
#statements
done
如果分支结构,条件写得一目了然,尽量不要分支嵌套,出现那种嵌套地狱
if [[ condition ]]; then
#statements
elif [[ condition ]]; then
#statements
else
#statements
fi
总体顺序执行脚本部分,也可能出现在循环和分支中,偏向使用test , && , || , | 的方式,打印当注释,感觉很多情况横着看比竖着看要方便些,例如:
src_dir=`echo "get src_dir from config" && cat $config_file | grep "src:" | cut -d ':' -f `
echo "cp src_dir or not..." && test -f $src_dir && cp $src_dir ./tmp_dir || (echo "cp src_dir failed,exit" && exit )
其他:
关于function,在包含业务的脚本中写function,可以把function写纯,约定个返回方式,然后单独分到一个脚本里;
bash shell的表达能力有限,如果产品中有一些比较复杂的业务逻辑,还想用脚本,还打算扩展的,还是移步python或perl等脚本语言吧,shell脚本一长就很难看了;
如果有什么优雅的shell脚本写法,可以email至skyline1225@163.com,谢谢!
粗谈shell脚本风格的更多相关文章
- 浅谈自底向上的Shell脚本编程及效率优化
作者:沐星晨 出处:http://blog.csdn.net/sosodream/article/details/6276758 浅谈自底向上的Shell脚本编程及效率优化 小论文,大家多批评指导:) ...
- Shell脚本编程的常识
(这些往往是经常用到,但是各种网络上的材料都语焉不详的东西,个人认为比较有用) 七种文件类型 d 目录 ...
- shell脚本编程常识
(这些往往是经常用到,但是各种网络上的材料都语焉不详的东西,个人认为比较有用) 七种文件类型 d 目录 ...
- SHELL脚本编程的常识和VI常用技巧
来源:http://mprc.pku.edu.cn/mentors/training/TrainingCourses/material/ShellProgramming.HTM#_Toc3751808 ...
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- Linux Shell 脚本调试
方法如下所示:(1) 使用选项–x,启用shell脚本的跟踪调试功能: $ bash -x script.sh 运行带有-x标志的脚本可以打印出所执行的每一行命令以及当前状态.注意,你也可以使用sh ...
- shell脚本编程-循环(for、while、until)
for命令格式:– list参数:迭代中要用的一系列值– 每个迭代中,变量var会包含列表中的当前值– do和done语句之间输入的命令可以是一条或多条标准的bash shell命令 1 2 3 ...
- Linux Shell脚本编程的注意事项
Linux下(Shell脚本 http://www.jbxue.com/jb/shell/)编程的一些注意事项,如编程风格.命名风格等. 一.常用技巧 ssh user@server bash < ...
- shell脚本入门
什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch ...
随机推荐
- 1833: [ZJOI2010]count 数字计数
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 2951 Solved: 1307[Submit][ ...
- [Angular Tutorial] 0-Bootstraping
在这一节的tutorial中,您将会逐渐熟悉AngularJS phonecat app的最重要的源代码文件.您也将学到如何将开发服务器与angular-seed绑定到一起,并且在浏览器中运行应用. ...
- 创建iwatch 程序选项
include complication :包含自定义表盘事件 include glance scene:包含缩略图事件
- wildfly 如何设置外网访问
wildfly的默认配置是不支持外网访问的, 要想实现外网访问需要修改standalone.xml配置文件. 配置文件所在路径:wildfly/standalone/configuration/sta ...
- Java中间件:淘宝网系统高性能利器(转)
淘宝网是亚太最大的网络零售商圈,其知名度毋庸置疑,吸引着越来越多的消费者从街头移步这里,成为其忠实粉丝.如此多的用户和交易量,也意味着海量的信息处理,其背后的IT架构的稳定性.可靠性也显得尤为重要.那 ...
- HTML 多媒体、Object 元素、音频、视频
Web 上的多媒体指的是音效.音乐.视频和动画. 现代网络浏览器已支持很多多媒体格式. 什么是多媒体? 多媒体来自多种不同的格式.它可以是您听到或看到的任何内容,文字.图片.音乐.音效.录音.电影.动 ...
- aJax请求结果中包含form的问题
jsp页面a.jsp如下: <form action='login' id='formId' method='post'> <input name='user'> </f ...
- 《JAVASCRIPT高级程序设计》第二章
把javascript应用在网页中,需要涉及web的核心语言-html:如何让javascript既能与html共存,又不影响页面的显示效果,经过长时间的讨论.试错,最终的决定是为web增加统一的脚本 ...
- 蓝桥网试题 java 基础练习 字母图形
----------------------------------------------------------------- 不知道说啥 感觉好像偏离主体思想了 但是这样写好简单 ------- ...
- webservice_模拟报文测试
一.WebService测试小工具STORM 二.利用MyEclipse的WebService视图调用webservice Ø 除了客户端生成代码编写程序调用之外.还可以用MyEclipse提供 ...