Shell脚本书写规范

Shell脚本书写规范

代码风格规范

#!/usr/bin/env bash

代码注释

#!/usr/bin/env bash
#########################################################
# Function :Rotate application logs                     #
# Platform :All Linux Based Platform                    #
# Version  :1.0                                         #
# Date     :2017-07-28                                  #
# Author   :Stephen.Shi                                 #
# Contact  :sp@meitu.com                                #
# Company  :MeiTu                                       #
#########################################################

参数规范

当我们的脚本需要接受参数的时候,我们一定要先判断参数是否合乎规范,并给出合适的回显,方便使用者了解参数的使用。 最少,最少,我们至少得判断下参数的个数

环境变量

一般情况下我们会将一些重要的环境变量定义在开头,确保这些变量的存在。

变量的定义和引用

缩进规矩

缩进同一

命名标准

  1. 文件名规范,以.sh结尾,方便识别

  2. 通过脚本名称最好能够直接读出脚本的用途,比如常用xx服务的启动脚本可命名为start_xx.sh,oo服务的监控脚本可命名为oo_monit.sh,告警脚本可名称为abc_alert.sh

  3. 变量名字要有含义,不要拼错,尽量使用英文

  4. 统一命名风格,用驼峰或者下划线连接,**==推荐==**使用小写字母加下划线的方式

编码统一

在写脚本的时候尽量使用UTF-8编码,能够支持中文等一些奇奇怪怪的字符。 尽管脚本中可以写中文,但是在写注释以及打log的时候还是尽量英文,毕竟有些机器还是没有直接支持中文的,打出来可能会有乱码。

执行权限

日志和回显

  1. 一些debug级别的信息,在脚本调试结束后需要关闭。

  2. 日志输出要带时间、要带时间、带时间,在写定时任务用的脚本时尤为重要

  3. 日志的输出推荐使用tee -a ${log_file}的方式,可以直接在main函数入口处添加日志输出。

脚本日志输出样例

太长要分行

代码有效率

勤用双引号

函数入口

考虑作用域

巧用heredocs

脚本路径

代码要简短

能一条命令解决的问题绝不用两条命令解决 ----> 牵涉到代码的可读性、执行效率

其他小tip

  • 路径尽量保持绝对路径,绝多路径不容易出错,如果非要用相对路径,最好用./修饰

  • 优先使用bash的变量替换代替 awk sed,这样更加简短

  • 简单的if尽量使用&&||,写成单行。比如 [[ x > 2]] && echo x

  • 当export变量时,尽量加上子脚本的 namespace,保证变量不冲突

  • 会使用trap捕获信号,并在接受到终止信号时执行一些收尾工作

  • 使用mktemp生成临时文件或文件夹

  • 利用/dev/null过滤不友好的输出信息

  • 会利用命令的返回值判断命令的执行情况

  • 使用文件前要判断文件是否存在,否则做好异常处理

  • 不要处理ls后的数据(比如ls -l | awk '{ print $8 }'),ls的结果非常不确定,并且平台有关

  • 读取文件时不要使用for loop而要使用while read

小技巧

封装函数有必要 使用静态变量声明 readonlylocal 修饰变量 使用$()代替`(反单引号) 使用[[]]代替[]

Last updated