粗谈shell脚本风格

注意:此风格并非官方版本,为个人在编写和维护脚本程序时总结出来的民间版本。

0. 开头:
除去开头的#!/bin/bash,最前面的就是脚本描述注释了,视个人喜好而定,例如:

1 ###############################################################
2 # author   :skyline
3 # args     :name => 名称,age => 年龄(optional) ...
4 # desc     :这是这个脚本的描述,
5 # charactor:UTF-8
6 # note     :email => skyline1225@163.com,(TODO something have not done)
7 ###############################################################
8 ......


1.初始化参数和环境变量
这一步主要对环境变量和参数进行初始化,还有对环境的设置,例如:

1 set -e
2 DIR=`pwd`
3 LOG=$DIR/test.log
4 NAME=$1
5 WORKSPACE=/home/$NAME

一般声明常量都用大写,变量小写,这个不用多说

2.参数检查
在初始化参数和环境后,就是检查,如果有问题就打印log退出或者提示退出

 1 help()
 2 {
 3 cat << HELP
 4 Usage:./test.sh [name]
 5 this script is to print name
 6     h,--help   display this help and exit
 7 
 8 HELP
 9 exit 1
10 }
11 [ "$1" = "h" -o "$1" = "--help" -o ! $# -eq 1 ] && help

或者

1 echo "test args..."
2 test "$name" != "" && echo "name is right,continue" || (echo "name is wrong:$age,exit" && exit 1)
3 test "$age" != "" && echo "age is right,continue" || (echo "age is wrong:$age,exit" && exit 1)
4 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

1 for (( i = 0; i < 10; i++ )); do
2   #statements
3 done

如果分支结构,条件写得一目了然,尽量不要分支嵌套,出现那种嵌套地狱

1 if [[ condition ]]; then
2   #statements
3 elif [[ condition ]]; then
4   #statements
5 else
6   #statements
7 fi

总体顺序执行脚本部分,也可能出现在循环和分支中,偏向使用test , && , || , | 的方式,打印当注释,感觉很多情况横着看比竖着看要方便些,例如:

1 src_dir=`echo "get src_dir from config" && cat $config_file | grep "src:" | cut -d ':' -f 2 `
2 echo "cp src_dir or not..." && test -f $src_dir && cp $src_dir ./tmp_dir || (echo "cp src_dir failed,exit" && exit 1)

其他:
关于function,在包含业务的脚本中写function,可以把function写纯,约定个返回方式,然后单独分到一个脚本里;
bash shell的表达能力有限,如果产品中有一些比较复杂的业务逻辑,还想用脚本,还打算扩展的,还是移步python或perl等脚本语言吧,shell脚本一长就很难看了;
如果有什么优雅的shell脚本写法,可以email至skyline1225@163.com,谢谢!

转载于:https://www.cnblogs.com/thestrals/p/6394657.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值