shell 脚本规范

一、背景

1.使用哪一种shell?

必须使用bash shell

2.什么时候使用shell?

  1. 数量相对较少的操作
  2. 脚本文件少于100行

3.脚本文件扩展名是什么?

shell脚本不要求有扩展名,或者以.sh结尾,库文件必须以.sh结尾,并且不可执行。

二、环境

STDOUT vs STDERR

所有的错误信息都应该被导向STDERR。

err() {
echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $@" >&2
} if ! do_something; then
err "Unable to do_something"
exit "${E_DID_NOTHING}"
fi

三、注释

1.文件头注释

每一个文件的开头必须对文件进行描述

基本格式:

#!/bin/bash
# Date :
# Auth :
# E-mail:
# 功能描述

2.功能注释

任何函数及库函数无论长短都必须注释。

3.实现部分注释

注释较复杂、不易阅读、重要的部分

四、格式

1. 缩进

缩进4个空格,不允许使用制表符

2. 行的长度

每行最大长度为80个字符

3. 管道

如果一行容不下整个管道,把整个管道分割成每一行一个管道。

该规则同样适用于 || 和 &&

# Long commands
command1 \
| command2 \
| command3 \
| command4

4.循环

将 ; do , ; then 和 while , for , if 放在同一行,else单独一行。

if condition ;then
command
else
command
fi

5.case

如果命令只有一行,命令可以和;放在一行,其他情况下;单独一行。

case "${expression}" in
a)
command
;;
absolute)
command
;;
*)
command
;;
esac

6.变量

除了单个字符的特殊变量和定位变量之外,其他变量在引用时必须用{}括起来

除了特殊情况下使用$*,其他情况都必须使用$@

五、特性和BUG

1. 命令替换

使用 $(command) 而不是command

2. test,[和[[

必须使用[[

在 [[ 和 ]] 之间不会有路径名称扩展或单词分割发生,所以使用 [[ ... ]] 能够减少错误。而且 [[ ... ]] 允许正则表达式匹配,而 [ ... ] 不允许

3.测试字符串

使用 -z 或 -n 测试,不要使用 [[ "${my_var}" = "" ]]

4. eval

避免使用eval

六 命名规范

1.函数

  1. 函数名小写,并使用下划线分割单词
  2. 函数名和() 没有空格
  3. 大括号和函数名位于同一行

2.变量名

同函数名

3.常量和环境变量名

  1. 全部大写
  2. 下划线分割

4.源文件名

  1. 小写
  2. 需要分割使用下划线进行分割

5.只读变量

使用 readonly 或者 declare -r 来确保变量只读

6.本地变量

使用 local 声明特定功能的变量。声明和赋值应该在不同行。

7. 函数位置

所有函数放在常量下面

8.主函数,main

文件最后一行

main "$@"

七 命令调用

1.检查返回值

对于非管道命令,使用 $? 或直接通过一个 if 语句来检查以保持其简洁。

if ! mv "${file_list}" "${dest_dir}/" ; then
echo "Unable to move ${file_list} to ${dest_dir}" >&2
exit "${E_BAD_MOVE}"
fi # Or
mv "${file_list}" "${dest_dir}/"
if [[ "$?" -ne 0 ]]; then
echo "Unable to move ${file_list} to ${dest_dir}" >&2
exit "${E_BAD_MOVE}"
fi

参考:

https://google.github.io/styleguide/shell.xml

shell 脚本规范的更多相关文章

  1. Shell编程-12-Shell脚本规范及调试

    目录 Shell脚本规范 Shell脚本调试 Shell脚本规范     良好的代码规范不仅方便阅读,也利于维护和提升开发效率.因此建议大家在编写Shell脚本时养成良好的代码习惯.今天就和大家探讨一 ...

  2. 【Shell Basic】Shell脚本编写规范

    shell脚本需要有较高的实用性.可维护.可阅读.方便他人阅读,因而需要建立一定的规范来操作 dream361@master:~$ cat test2.sh #!/bin/bash 所使用的bash程 ...

  3. 利用shell脚本生成CHANGELOG.md(包含git提交规范)

    前言 我们经常看到github上面有很多CHANGELOG.MD包含版本的更新信息,如果我们的git提交能遵循一定的规范,那么使用gitlog就能很方便的生成它 生成结果  shell脚本 http ...

  4. Shell脚本开发规范

    一.前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这 ...

  5. 【Shell脚本编程系列】Shell脚本开发的习惯和规范

    1.开头指定脚本解释器 #!/bin/sh或#!/bin/bash 2.开头加版本版权信息 #Date #Author #Mail #Function #Version 提示:可配置vim编辑文件时自 ...

  6. 【Shell脚本编程系列】知识储备以及建立规范的脚本

    前言 学习shell脚本编程需要的知识储备: vi/vim编辑器命令 vimrc设置要熟练 基础命令,100多个要熟练 基础和常用的网络服务命令要会:nfs . rsync. inotify . la ...

  7. Shell脚本编写规范

    shell脚本需要有较高的实用性.可维护.可阅读.方便他人阅读,因而需要建立一定的规范来操作 dream361@master:~$ cat test2.sh #!/bin/bash 所使用的bash程 ...

  8. 编写Shell脚本的最佳实践,规范一

    随着写的SHELL程序越来越多,发现自己每次写都有不同的习惯或者定义了不同的东西,变量名定义得不一样,整个程序缩进不统一,没有注释等问题,等我回过头看这些程序的时候发现很麻烦.所以写了个shell代码 ...

  9. 编写Shell脚本的最佳实践,规范二

    需要养成的习惯如下: 代码有注释 #!/bin/bash # Written by steven # Name: mysqldump.sh # Version: v1.0 # Parameters : ...

随机推荐

  1. poj 1269 Intersecting Lines(直线相交)

    Intersecting Lines Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8637   Accepted: 391 ...

  2. pspice建立仿真模型元件库

    摘自:http://royroyyy.blog.163.com/blog/static/1376506172011026102216175/ PSpice9.2电子元器件模型--由网页下载的model ...

  3. Django组件---Django请求生命周期和中间件

    Django组件---Django请求生命周期和中间件 Django请求生命周期 说明: client代表浏览器,浏览器的内部为我们封装了socket,Django的WSGI模块也为我们封装了sock ...

  4. 碎片记录——JMeter之 http post json对象与参数化调用,以及beanshell 引用Java源码

    参考文档 http://jmeter.apache.org/usermanual/component_reference.html#samplers https://blog.csdn.net/qq_ ...

  5. Test 6.24 T3 水题

    问题描述 秋之国首都下了一场暴雨,由于秋之国地势高低起伏,不少地方出现了积水. 秋之国的首都可以看成一个 n 行 m 列的矩阵,第 i 行第 j 列的位置高度为 ai,j,首都以外的地方的高度可以都看 ...

  6. 对Asycn/Await的研究

    1.async 函数就是 Generator 函数的语法糖. 例如: var fs = require('fs'); var readFile = function (fileName){ retur ...

  7. Linux学习-基于CentOS7的MariaDB数据库的安装

    一.实验环境: 系统:CentOS7.6,关闭了防火墙与SELINUX 数据库版本:mariadb-10.2.25(二进制安装与源码安装) 二.安装方法: 1.yum源安装 (1) 配置yum源,官方 ...

  8. python 全栈开发,Day53(jQuery的介绍,jQuery的选择器,jQuery动画效果)

    01-jQuery的介绍 1.为什么要使用jQuery 在用js写代码时,会遇到一些问题: window.onload 事件有事件覆盖的问题,因此只能写一个事件. 代码容错性差. 浏览器兼容性问题. ...

  9. 2019 年百度之星—初赛一 B题 Game

    题目链接 题意:最开始可以选择任意位置,在一个坐标轴上,依次走到一个区间里面,可以选择走一步两步,求最小步数. 思路:贪心,刚开始合并区间,确定初始位置以及方向.往右走肯定到左端点,往左走先到右端点, ...

  10. sql select语句详解

    先group by 后  order by SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]    * | expression [ AS ...