Shell脚本的书写规范与优秀的开发习惯

<--目录-->
1)脚本模块名
2)代码框架
3)函数规范
4)脚本存放规范
5)补充规范19条
6)优秀的开发习惯

【脚本模块名】
1、常规Shell脚本使用统一后辍:.sh,例:wsyht.sh
2、模块的启动和停止脚本统一命名为start_{模块名}.sh和sop_{模块名}.sh
3、监控脚本可以*_mon.sh为后辍,控制脚本以*_ctl.sh为后辍
4、模块(及其脚本和二进制程序)命名应该代表其特性和功能,不要使用个人名字缩写等形式命名
5、模块中的脚本和二进制程序命名禁止和其它脚本和二进制程序重名

【代码框架】
1、脚本开头解释器声明为 #!/bin/bash,也可以为#!/bin/sh,尽量统一
2、配置文件及库函数脚本等的引用如,source conf/httpd.conf
3、主脚本过程只实现程序主干,功能实现尽量封装在子函中
4、对于能独立执行的脚本要有 usage 和 version 函数,可以输出脚本用法和版本信息

5、规范代码树如下:
[[email protected] ~]# tree
|-- bin
| `-- ipsecct
|-- conf
| `-- ipsec.cfg
`-- func
`-- functions

【函数规范】
1、函数定义时在函数名前加上function保留字,虽然/etc/init.d/functions中没有这样做
2、尽量一行一条语句,而不是使用":"将多个语句隔开,尽可能多的判断操作是否成功,并对其进行相应处理
3、对于重要的函数,需说明函数用途,参数,返回值,作者,版本

【脚本存放规范】
1、服务控制脚本统一放置在/service/scripts目录下;如果多个运维人员,可以放在以自已用户命名的二级目录下

如/server/scrips/username;比如我开发的脚本可以放在/server/scripts/wsyht下

【补充规范19条】
1、必须要有基本的日志输出
2、要关注脚本的效率和系统消耗,综合、平衡的考虑
3、函数参数传递:在调用函数时,向函数传递的参数如果是以变量的方式进行传递

必须使用双引号将变量引起,这是为了防止某个变量中以多个空格分隔的字段,导致函数误认为是多个参数
4、避免cat大文件。比如for id in `cat id_file`;do … ;done。而是采用readline形试读入文件
5、对上一个命令需要if [ $? ]判断返回值,对于异常分支,需有相应的处理策略;或打印warning日志,或提示后退出
6、sort超过1G数据文件时,必须用-T指定临时文件夹,推荐在使用到sort的时候就使用-T指定到自身的TMP目录
7、避免使用大的while/for循环,如果实在需要,请考虑用awk命令替代
8、对于一系列有严格依赖关系的命令,请使用&&来处理

比如:make mydir && mv myfile mydir; 对于有前后次序的脚本,禁止采用后台运行 & 命令。(推荐)
9、脚本运行前后,注意清除过期数据(上次运行生成的数据),注意rm的风险,可考虑替代方法,如find
10、对于功能较为复杂的脚本,考虑使用一些函数对功能点进行封装。这样可以使脚本清晰易读。(推荐)
11、任何出错情况必须将出错信息打印到日志中;严重的错误必须以邮件或短信报警的形式发出。(必须)
12、对于逻辑比较复杂的脚本,可以使用 set -x 来打印命令执行情况,便于调式和排错(推荐)。
13、wget之前,注意先删除本地文件;(推荐)
14、拷贝比较大的文件,最好先将文件cp到一个临时文件夹,然后mv到目标文件夹,避免下游模块读取到不完整文件
15、mv,cp模块,注意要使用命令全路径,直接强制替换,如/bin/cp -ap wsyht /tmp
16、脚本中,要注意对单引号‘‘ 双引号"" 的转义,不明确转义启义的,在自测的时候多加小心。(推荐)
17、例用ps axuw|grep 来获取信息时,注意ps打印的最大宽度。建议多打几个w,例如ps auxwww|grep … ;(推荐)
18、使用sort,uniq,join,comm等命令时,要注意两点:

1) 是否要求排序(例如uniq,join,comm要求输入文件是排好序的);
2) 如果排序,要求以什么方式排序(例如,comm要求输入文件是排好序的,而不是数值序);(推荐)

19、对于Java程序脚本要环境变量的,写脚本前最好通过export重新声明环境变量,以免在定时任务场合使用出问题

【优秀的开发习惯】
1、尽量少用中文注释:如果非要用,要根据自身的客户端对服务器进行字符集调整
      如:export LANG="zh_CN.GB18030"在脚本中,调整下了符集

2、尽量以.sh为扩展名
      例:script-name.sh

3、书写代码习惯:
      a.成对内容的一次写出来。如:
     {}、[]、‘‘、``、""
      b.流程控制语然一次书写完,如:
      if语句格式一次完成:
      c: 书写[]时,添内容之前直接两端的空格留出来,例: [ content ]
      d.变量的字符串定义加双引号,等号前后不能有空格。WSYHT_FILE="test.txt"
      e.变量的引用加双引号,大括号,"{WSYHT_FILE}"
      f.特别注意,脚本中的单引号

4、调整vim语法配置,及内容自动补便配置

时间: 2024-10-21 11:07:39

Shell脚本的书写规范与优秀的开发习惯的相关文章

脚本规范与优秀的开发习惯

<--目录--> 1)脚本模块名 2)代码框架 3)函数规范 4)脚本存放规范 5)补充规范19条 6)优秀的开发习惯 [脚本模块名] 1.常规Shell脚本使用统一后辍:.sh,例:wsyht.sh 2.模块的启动和停止脚本统一命名为start_{模块名}.sh和sop_{模块名}.sh 3.监控脚本可以*_mon.sh为后辍,控制脚本以*_ctl.sh为后辍 4.模块(及其脚本和二进制程序)命名应该代表其特性和功能,不要使用个人名字缩写等形式命名 5.模块中的脚本和二进制程序命名禁止和其它

12_Shell语言———脚本的书写规范以及检查和调试脚本

一.脚本的书写规范 在前文中写过一个脚本first.sh,用来创建一个用户,这里新创建一个脚本useradd.sh,用来创建多个用户,用户名和密码相同: # nano useradd.sh #! /bin/bash # Author: Mickey // 指定作者 # Date:2014-5-14 // 指定日期 # Version:0.0.1 // 指定版本 # Description:Add Users // 描述脚本的功能 # 上述内容为规范的脚本格式 useradd userA echo

linux服务器部署jar包以及shell脚本的书写

背景:记录在linux环境下部署jar程序的过程 1 部署过程记录 1.1 程序结构 这里的main函数就在DemRest2.java 文件中. 为了部署方便,要做到以下两点: 1 在导出的jar包中不包含依赖的jar文件 2 程序用到的配置文件可以让用户进行自定义 ,不将其放在jar包中. 1.2 导出jar包 这里导出普通的jar包即可.为了方便传输,只导出必须的程序文件. 在jar包导出后,进入导出的jar包中,将配置文件tws.properties文件删除. 1.3 程序部署 将所有需要

shell脚本之编程规范与变量

shell脚本概念 将要执行的命令按顺序保存到一个文本文件,给该文件一个可执行权限,便可运行. shell脚本的构成 1.脚本申明 脚本声明是指明用哪个解释器来解释 2.注释信息 注释信息是指明这个脚本的一些说明信息.就知道这个脚本时干什么用的了,这个信息不执行 3.可执行语句 进行执行的一些命令 执行shell脚本的方式 1.绝对路径 2.相对路径 3.sh 脚本路径 4.source 脚本路径 注意:其中,绝对路径与相对路径实行shell脚本时,该脚本文件必须要有可执行权限.Source脚本

Shell学习之路和我发布过的Shell脚本博文

Shell学习之路 目录 Shell学习之路[第一篇]:别名,管道,用户配置文件,变量,read Shell学习之路[第二篇]:条件测试,运算符,选择结构,for循环结构 Shell学习之路[第三篇]:While循环,C-for循环,Until循环,case分支结构,流程控制语句 Shell学习之路[第四篇]:函数,数组,变量替换 Shell学习之路[第五篇]:多线程脚本 Shell学习之路[第六篇]:Trap信号捕捉命令介绍与Shell结合实战讲解 Shell学习之路[第七篇]:Linux下d

shell脚本初识别

1.什么是shell ? shell 是一个命令解释器.用户输入命令,解释器负责解释给内核,将处理后的结果反馈给用户. 2.交互式与非交互式 - 交互式shell:用户输入命令,解释器解释把处理后的结果反馈给用户的过程称之为交互式. - 非交互式shell:shell执行文本中的命令 当执行到文件的末尾 bash退出 父shell 不能继承子shell变量 子shell可继承父shell变量. 3.shell脚本的书写规范 ? (1) 目录统一 ? (2) shell脚本的结尾要以.sh结尾 ?

《跟老男孩学Linux运维之shell编程实战》-第一章 shell脚本初步入门

本文是在学习<跟老男孩学Linux运维之shell编程实战>这本书时记录的知识点.看了这本书,我受益匪浅,当然这仅是我个人观点.下面我们言归正传,开始了解一下shell脚本吧! shell本身是一个命令解释器,它的作用是解释执行用户输入的命令及程序等. shell脚本语言的种类:sh.ksh.bash.csh.tcsh,Linux中主流的shell是bash,所以本文及后续shell脚本以bash为主. 那我们如何查看Linux系统中默认的shell? [[email protected] ~

shell脚本编写守则

现在centos7中使用的是bash软件,通过以下命令可以查看bash版本: [[email protected] ~]# cat /etc/redhat-release #查看系统的版本 CentOS Linux release 7.5.1804 (Core) #我这里使用的是centos 7.5 1804 [[email protected] ~]# bash --version #查看bash的版本 GNU bash, 版本 4.2.46(2)-release (x86_64-redhat

Shell脚本编程概述(一):算数运算和条件测试

一.shell脚本语言 1.编程语言的分类: (1)根据运行方式 编译运行:源代码 --> 编译器 (编译)--> 程序文件: 解释运行:源代码 --> 运行时启动解释器,由解释器边解释边运行: (2)根据其编程过程中功能的实现是调用库还是调用外部的程序文件: shell脚本编程:利用系统上的命令及编程组件进行编程: 完整编程:利用库或编程组件进行编程: (3)编程模型: 过程式编程语言:以指令为中心来组织代码,数据是服务于代码: 顺序执行.选择执行.循环执行:代表:C,bash 面向对