`
Fangrn
  • 浏览: 799322 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

编写Shell代码规范

阅读更多

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

1.1 目的

定义Shell脚本命名和编码规范,统一管理Shell脚本,便于自己和别人查看,提高代码书写速度和美观,暂时只对自己进行约束,其它人只供参考。

1.2 开发工具

shell脚本是个文件,没有开发环境,FC4图形环境下,可用gedit、vi、vim、joe等,推荐使用vim因为这个最通用,他的功能同样 是很强大,如果想在图形化下可以用gvim,并将环境设置为sh高亮显示,方法:1)cp /etc/vim/vimrc ~/.vimrc 2) vim ~/.vimrc 去掉”syntax on,并且;Windows下,可用ultraedit。文件保存时,有汉字提示的Shell脚本文件,文件保存时,字符编码必须为 GB18030/GBK/GB2132 (UTF-8) 三种格式之一。

2 对象命名规范

2.1 命名约定
1.本文档的命名约定是系统配置文件、脚本文件;

2.文件名、变量名、函数名不超过20个字符;

3.命名只能使用英文字母,数字和下划线,只有一个英文单词时使用全拼,有多个单词时,使用下划线分隔,长度较长时,可以取单词前3~4个字母。

4.文件名全部以小写命名,不能大小写混用(通过U盘交换文件时,大小写可能会丢失,即:大写文件名可能会全部变成小写文件名);

5.避免使用Linux的保留字如true、关键字如PWD等(见附表);

6.从配置文件导出配置时,要注意过滤空行和注释

2.2代码开头约定

1、第一行一般为调用使用的语言

2、下面要有这个程序名,避免更改文件名为无法找到正确的文件

3、版本号

4、更改后的时间

5、作者相关信息

6、该程序的作用,及注意事项

7、版权与是否开放共享GNU说明

8、最后是各版本的更新简要说明
如下面的例子:

#!/bin/bash
 
# -------------------------------------------------------------------------------
# Filename:    check_mem.sh
# Revision:    1.1
# Date:        2009/02/10
# Author:      katy
# Email:       longkaty#sina.com
# Website:     www.lazysa.com
# Description: Plugin to monitor the memory of the system
# Notes:       This plugin uses the "" command
# -------------------------------------------------------------------------------
# Copyright:   2009 (c) Ajian
# License:     GPL
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# you should have received a copy of the GNU General Public License
# along with this program (or with Nagios);
#
# Credits go to Ethan Galstad for coding Nagios
# If any changes are made to this script, please mail me a copy of the changes
# -------------------------------------------------------------------------------
#Version 1.0
#The first one , can monitor the system memory
#Version 1.1
#Modify the method of the script ,more fast2.3
 

由于Shell没有很好的编辑环境,所以,建议用四个空格为基数进行缩进,好处在不同的环境下TAB可能代表的空格数不同,造成代码的错乱。用TAB他的优点是速度快方便,可以在编辑的时候也用TAB,但需要转换。

可以在更改编辑器,Windows的就不说了,主要是VIM

:set softtabstop=4

注意不要使用 :set tabstop=4 上面那个是同时把这一个TAB转换为四个空格,而这一条是定义TAB为四个空格,如果到其它编辑器上就会看到默认8个空格的情况,那就会不美观了。

另外将原有的TAB转换为空格,:retab

如果想让刚才的配置永久生效需要改动vim的配置文件 vim ~/.vimrc,更多详细的有用的配置见“VIM配置总结”

2.4 页宽

每行不要超过80字,如果超出,建议用“”折行,有管道的命令行除外。

2.5 环境变量

变量:全部是大写字母

变量引用:全部以变量名加双引号引用,如”$TERMTYPE”,或“${TERMTYPE}”,如果变量类型是数值型不引用,如:

如果需要从配置文件导出变量,则在变量前加一大写字母,以识别导出变量与自定义环境变量的区别,如:

变量值的引用尽量以$开头,如$(ls inst_*.sh),避免使用`ls inst_*。sh`

循环控制变量可以命名为单个字母, 比如 i、j等。 也可以是更有意义的名称, 比如 UserIndex。

环境变量和全局变量 在脚本开头定义。

函数中使用较多的文件,以环境变量的形式在文件开头定义,仅函数中使用的变量在函数开头定义

2.6 函数

函数以动名词形式存储,且第二个单词首字母要大写,如updateConfig()

每个函数控制在50-100行,超出行数建议分成两个函数

多次反复调用的程序最好分成函数,可以简化程序,使程序条理更清楚

2.7 语句

if 语句

if/then/else 语句中最可能被执行的部分应该放在 then 子句中, 不太可能被执行的部分应该放在 else 子句中。

如果可能, 尽量不要使用一连串的 if 语句, 而应该以 case 语句替代。

不要使 if 语句嵌套超过5层以上, 尽量以更清楚的代码替代。

case 语句

概要

case 语句中的单个子句应该以 case 常数的数字顺序或字母顺序排列。 子句中的执行语句应该尽量保持简单, 一般不要超过4到5行代码。 如果执行语句过于复杂, 应该将它放置在独立的函数中。

case 语句的 *) 子句应该只在正常的默认情况或检测到错误的情况下使用。

格式

case 语句遵循同样的缩进和命名约定。

while 语句

使用 Exit 过程退出 while 循环是不好的; 如果可能, 应该只使用循环条件来结束循环。

while 循环的所有初始化代码应该紧贴在进入 while 循环之前, 不要被其他无关语句分隔开。

循环结束后的处理应该紧跟在循环之后。

for 语句

如果需要执行确定次数的增量循环, 应该用 for 语句替代 while 语句。

2.8 信号捕捉

如果在进行重要配置修改时,应捕捉用户按键,如果用户按下Ctrl+C等重要操作终止程序,则调用回退程序,如:

2.9 关于注释

程序头应加注版本与功能说明的注释。但程序第一行不能汉字。

程序体中应包含必要的注释,注释说明如下:

单行注释,可以放在代码行的尾部或代码行的上部;

多行注释,用于注解复杂的功能说明,可以放在程序体中,也可以放在代码块的开始部分

代码修改时,对修改的内容要加必要版本注释及功能说明。

分享到:
评论

相关推荐

    新版Linux Shell编程实训(全)20170518.docx

    前言 10 场景说明 11 基础知识简介 14 ...附录Shell编码规范说明 295 1. 什么时候使用shell 295 2.Shell文件和解释器调用 295 3.环境 296 4.注释 296 5.格式 298 6.特性及错误 304 7.命名转换 308 8.调用命令 311

    Bash Shell脚本实战11例

    本文档对于十一个示例进行了bash代码的示例编写,主要面向那些没有太强的bash脚本编程基础的人,让这些人能够熟悉bash脚本的编写流程,代码规范及常规代码编写时的一些编写习惯的培养等。

    吴天雄--shell知识点总结.doc

    第一部分讲述关于shell(shell的定义、种类、编写规范、使用流程),第二部分讲述shll进阶(变量的定义和使用、只读变量、接收用户输入、删除变量、条件判断语句、算数运算符、关系运算符、逻辑运算符、字符串运算符...

    【shell脚本】shell脚本之概念、运行方式、变量的使用、交互式脚本、运算(shell脚本基础学习一)

    shell概念 --- 编写执行--- 变量 --- 运算---  shell脚本 /bin/bash 默认解释器 cat /etc/shells 查看所有解释器 yum -y install ksh 安装新解释器 bash优点 tab建,快捷键,历史记录,管道符,重定向 --------------...

    Linux bash Shell中的变量类型详解

    在Linux系统中进行日常运维或者是编写脚本时,变量是再熟悉不过的了,但这些变量都有哪些类型,具体的用法又有哪些差异呢?本文整理分享给大家: 一、bash变量类型: 本地变量 局部变量 环境变量 位置变量 特殊变量...

    ScalaMake:Scala 作为一种 shell 脚本语言,其中加入了一些 Make 和 Ant 以作为很好的衡量标准。 Specs 测试说明了您可以执行的大部分操作,并包含在二进制 .zip 中,并附有说明如何开始的 README

    有时,您所需要的只是处理文件系统约束并根据文件系统中的依赖关系编写 Scala、Java 或平台 shell 命令的脚本。 有时你所需要的只是一个像“Make”这样的跨平台的东西。 有时您只需要 ScalaMake。 在内部,我使用 ...

    最新电商大数据平台项目实战

    16.电商项目之Sqoop的Shell脚本编写.mp4 17.电商项目之Azkaban简介.mp4 18.电商项目之Azkaban安装(Exec参数配置).mp4 19.电商项目之Azkaban安装(Web参数配置).mp4 20.电商项目之Azkaban案例(2.X任务).mp4 21....

    JSTerminal:终端应用程序在命令行执行JavaScript程序

    它支持使用JavaScript语言编写Shell脚本。 目标 目标计算机:macOS(尚不支持iPadOS) 开发环境:Xcode 11或更高版本 开发语言:Swift和JavaScript 版权 版权所有(C)2020。该软件是根据并且该文档是根据。 文件...

    2010-2011华南理工大学操作系统课程设计(完整源代码和详细文档)

    本资源含所有三个任务的源代码,采用Visual Studio.NET 2003的C++与MFC编写(前端有图形化界面),供各位参考。 课程设计目的 本设计的目的是实现操作系统和相关系统软件的设计,其中涉及进程编程、I/O操作、存储...

    dpc2:数据预取锦标赛2

    宋、塞巴斯蒂安·克鲁帕、安德鲁·菲什伯格、约瑟夫·斯普尤特哈维穆德学院比赛规范: : 内容该存储库包含给定的材料/示例、我们为预取器提交编写的代码、编写并用于收集数据的 shell 脚本、收集的数据和写入的内容...

    经典批处理编程简明教程

    批 处理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同,就c语言来说,扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译连接后的 exe文件才可以称之为...

    JAVA上百实例源码以及开源项目源代码

    Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟 用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:...

    JXTA技术手册/奥克斯(Oaks,s.),切 中文 高清版

    介绍了JXTAShell应用程序、对等体、管道和发现服务,讨论了JXTA应用程序最重要的安全性问题,提供了大量可立即使用的高效JXTA应用程序示例和所有的JXTAAPI类的快速参考及一些重要的官方JXTA规范 JXTA是“juxtapose”...

    matlab源码求一元函数-PyStudy:PyStudy

    代码规范程度高,可读性强 目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Python / Shell / Ruby / Go 网络爬虫 - Python / PHP / C++ 数据分析挖掘 - Python / R / ...

    COM编程入门篇.doc

    内容包括COM规范简介,重要的COM术语以及如何重用现有的COM组件。本文不包括如何编写自己的COM对象和接口。...在例子代码中使用了一点MFC和ATL,如果你不熟悉MFC和ATL也没关系,本文会对这些代码进行完全透彻的解释。

    linux programming instances网络编程教程 附源代码

    本书通过55个精彩的实例,全面剖析了在Linux下编写网络应用程序的方法,并阐述了网络协议架构和开发规范。为了适应不同读者的需要,本书从最基本的Linux系统操作到网络技术的基本理念,逐步深入至Linux/UNIX下具体的...

    uestc-coursework-repo:2018 - 2022 年,就读于电子科技大学(UESTC)软件工程(互联网“+”)专业,本科期间所写的课程作业代码及完成的实验报告

    部分课程作业 C/C++ 代码编译测试于 (最后更新于 2010 年 7 月),与一直在维护更新的编译软件如 Visual Studio 和最新的编写规范相比存在很多不同之处。故直接在其他编译软件上运行很有可能发生编译无法通过的问题...

    BBS

    代码的规范位置在GitHub中: 人力资源 如果您有一个此处未涵盖的问题: 询问HervéPagès或Lori Shepherd。 如果这两个都不可用,马丁·摩根可能会知道。 BBS概述 发布和开发人员的构建开始时间在“ 进行了总结。 ...

    精通Windows.API-函数、接口、编程实例.pdf

    2.5 对Windows程序设计规范的建议 25 第3章 开发工具配置与使用 26 3.1 使用Visual C/C++编译链接工具 26 3.1.1 编译器cl.exe 27 3.1.2 资源编译器rc.exe 31 3.1.3 链接器link.exe 32 3.1.4 其他工具 ...

Global site tag (gtag.js) - Google Analytics