粗谈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 ...
随机推荐
- css--position和float
1.元素设置position:relative或者position:absolute后,才能激活left,top,right,bottom和z-index属性,默认情况下这些属性并未激活,设置了也会无 ...
- React Native 之 搭建开发环境
现在只能在MAC系统上安装. 1. 首先,HomeBrew 这是一个包管理库,用来下载其它工具. 打开网站:brew.sh 网页有个命令 /usr/bin/ruby -e "$(curl - ...
- Python3基础 用 函数递归求解 一个数字的阶乘
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- css3 翻牌效果
<!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/h ...
- Grunt构建工具能做哪些事?
Grunt到底有什么作用?一般用来干嘛? 很多前端的工作,包括Less编译.javascript压缩.Css压缩等零零碎碎的工作, 都可以让Grunt来做. 实际上在项目开发中,一般是前端代码 与 后 ...
- java 环境变量 windows(Java之负基础实战)
1.已经安装了JDK 添加系统变量 1.1.添加JAVA_HOME jdk路径,例如:C:\Program Files\Java\jdk1.8.0_65 1.2. PATH 添加内容 %JAVA_HO ...
- eclipse 开始运行提示 Java was started but returned exit code=13
Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境. 当我们安装使用时,会出现eclipse启动不了,出现" ...
- ASP.NET - 自定义控件处理页面事件(控件与页面数据交互)的方法
//用委托的方法实现 //控件代码 public delegate void DelegateFunction( string sPageTitle ); private DelegateFuncti ...
- ORACLE的Dead Connection Detection浅析
在复杂的应用环境下,我们经常会遇到一些非常复杂并且有意思的问题,例如,我们会遇到网络异常(网络掉包.无线网络断线).客户端程序异常(例如应用程序崩溃Crash).操作系统蓝屏.客户端电脑掉电.死机重启 ...
- Nagios 系统监控基本安装配置过程详解
Nagios 是一款免费的开源 IT 基础设施监控系统,功能强大,灵活性强,能有效监控 Windows.Linux.VMware 和 Unix 主机状态,交换机.路由器等网络设置等.一旦主机或服务状态 ...