1 脚本名以.sh结尾,名称尽量见名之意,比如ClearLog.sh Clear_Log.sh clearlog.sh SerRestart.sh Ser_Restart.sh;
2 尽量使用UTF-8编码,注释及输出尽量使用英文;
3 一般给到执行权限,但一些关于变量的配置文件不用加执行权限;
4 执行的时候可以使用bash 执行,或者使用bash -x执行,可以直观的显示具体的执行过程;
5 脚本首行使用/bin/bash,没有空格,不带任何选项;
6 第二行为空格,或者是添加一行空注释
7 接着开始注释内容:文件名、功能描述、作者、最后修改日期、版本号以及一些说明,还加上邮箱/手机号做为联系,如果可以,需要加上版权声明; 
8 注释内容之后空一行开始定义shell脚本中的变量;
9 脚本内的变量定义,尽量使用大写,或者大小写驼峰写法,或者使用下划线连接的方式。变量名要见名之意,避免a,b,c类似的定义,变量的定义前后不要用空格。
          如果是整形,需要使用declare -i来声明。
          如果是数组,则需要使用declare -a来声明。
          如果是只读变量,则需要使用declare -r来声明。
          变量值尽量使用双引号引起来,如果要使用强引用,如变量值中包含$符号,则使用”单引号引起来。
          如果要将命令的执行结果赋值给变量,则使用反引号,或者使用$().
10 变量的引用使用以下方式:
         ${GameZone}
         $GameZone
         推荐使用第一种,如:tar zcf ${GameZone}.tar.gz /apps/data/
11 单引号和双引号混合使用的场景:
         echo ‘Welcome to “my school”‘
12 在某些特殊的环境下,shell脚本里引用的命令,有可能是自己定义的bin路径,在执行的时候会报出command not found,

解决的方式是在执行的时候命令跟全路径,或者在脚本的开始,显式的设置一下PATH 变量,

如: export PATH=”/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/apps/bin/”

13 建议在脚本执行的开始重读下/etc/profile 或者是自己定义的关于环境变量的配置文件,推荐使用source,

如: source /etc/profile
               source /opt/sh/appenv.sh
14 使用here document;
        如果脚本在执行的时候需要大段输出提示信息,可是使用以下方式:
        cat << EOF
       This scripts used for XXX
       Usage:$0 [option]
       Pls be careful.
       Enjoy Yourself.
       EOF
       如果只是单行提示信息,可是使用echo的方式,可以添加颜色:
       echo “Welcome to use my script”
15 如果需要在脚本里生成配置文件的模板,也可以使用here document的方式,示例如下:
       cat>>/etc/rsyncd.conf<<EOF
       log file = /usr/local/logs/rsyncd.log
       transfer logging = yes
       log format = %t %a %m %f %b
       syslog facility = local3
       timeout = 300
       [data1]
       path=/home/username
       list=yes
       ignore errors
       auth users = data1user
       secrets file=/etc/rsyncd/rsyncd.secrets
       comment = some description about this moudle
       exclude = test1/ test2/
       EOF
16 如果需要创建临时文件,可以使用如下方式:
       mktemp -d /tmp/file$$
17 条件测试的时候,尽量使用[[]],而不用[]或者test,因为[[]]功能会更强大                                              
       [[ -d /tmp/logs ]]
      不在使用[ “x$NAME” == “x” ]这种方式;
18 算数运算使用(())或者是中括号,但是记得括号里面的变量不要再加$
       ((12+i))
       而非((12+$i))
19 使用高级变量的用法,比如使用
       ${GameZone:?”Error Message”}确保关键变量已经定义
       ${GameZone:=”S1″} 或者设置默认值
       否则:
       rm -rf ${GameZone}/* 后果不堪设想
20 可以使用&& ||来替代简单的if-then-else-fi语句。
21 尽量给每条语句或者代码段的执行给一个执行结果状态,如果某条命令执行失败,则exit N.
       尽可能使用$?来检查前面一条命令的执行状态。
22 流程控制语句尽量使用一下方式:
       for I in {1..10};do
        ..。
       done
       while true;do
        …
       done
       if [];then
        …
       fi
23 如果命令过长,可以分成多行来写,比如:
       ./configure \
       –prefix=/usr \
       –sbin-path=/usr/sbin/nginx \
       –conf-path=/etc/nginx/nginx.conf \
       –error-log-path=/var/log/nginx/error.log \
       –http-log-path=/var/log/nginx/access.log \
       –pid-path=/var/run/nginx/nginx.pid  \
       –lock-path=/var/lock/nginx.lock \
24 shell脚本并不要求强制缩进,但是要养成缩进的好习惯,可以使用两个空格,建议使用tab键。如:
       if [];then
         …
       fi
25 尽可能多的注释信息。
26 想要获取当前脚本所在目录,可以使用
      ScriptDir=$(cd $(dirname $0) && pwd)
27 尽可能的使用函数的功能,将不同的功能定义为函数,直接引用函数;
28 如果自定义环境变量,可以专门写到一个文件中,避免在/etc/profile中添加;
29 禁止使用SUID和SGID以及ACL用户访问控制列表的功能,如果需要较高权限,可以使用sudo;
30 关键的操作须有日志输出,专门记录操作的成功或者失败以及执行的时间点。
31 脚本内可能包含敏感信息,如服务器密码或者是数据库密码,如果公开之前先确认敏感信息是否已经删除。

版权声明:原创地址: https://blog.csdn.net/weixin_38154393/article/details/70738671

shell编程规范的更多相关文章

  1. 01 shell编程规范与变量

    前言: 大家对shell脚本应该都不算陌生了,如果突然问你什么是shell脚本?是干什么用的?由什么组成以及怎么使用?变量的概念是什么?作用范围是什么?变量间的算术运算怎么表示?你能很容易答出来吗 本 ...

  2. SHELL编程规范与变量

    shell相比标准开发语言比如JAVA,C,C++来说还是比较简单的,其实就是一堆命令的集合而已,初学者从简单的shell脚本学起,至于shell编程还是要有编程思想在里面,因此,循序渐进很重要,先研 ...

  3. shell编程规范:引用

    Shell代码规范 作 者: 毕小朋 用 途: 规范Shell代码书写,方便查看与修改 博 客: http://blog.csdn.net/wirelessqa 参 考: http://www.ohl ...

  4. Shell编程规范:Don't use ls | grep

    目录 一.背景 二.ShellCheck的规范 三.修改写法 1.ls | grep file 2.ls | grep regexp 3.ls | grep -v multi 四.最后 五.参考 一. ...

  5. Python subprocess shell 编程规范

    使用subprocess通过shell调用另一个模块组件时,需要对返回的code进行判断.判断结果为执行失败时需要raise Exception,不然调用树过于复杂时,我们很难跟踪到异常发生的位置.s ...

  6. Shell脚本之编程规范和变量

    Shell脚本编程规划和变量 1.Shell脚本概述 2.Shell编程规划 3.重定向与管道 4.Shell脚本变量 1.Shell脚本概述 Shell的作用:充当"翻译官"的角 ...

  7. shell编程企业级实战

    如何才能学好Shell编程 为什么要学习shell编程 Shell是Linux底层核心 Linux运维工作常用工具 自动化运维必备基础课程 学好shell编程所需Linux基础 熟练使用vim编辑器 ...

  8. Shell编程-01-Shell脚本初步入门

    目录 什么是Shell 什么是Shell脚本 Shell脚本语言的种类 常用操作系统默认Shell Shell 脚本的建立和执行 脚本规范 什么是Shell     简单来说Shell其实就是一个命令 ...

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

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

随机推荐

  1. 创建springboot项目

    springboot 就是为简化spring的创建 配置 部署 运行 而创建的. springboot 直接引入依赖jar包 就行了,无须配置xml 一 创建springboot 1.创建一个mave ...

  2. f-stack中ipc传递指针从应用中读取信息时挂掉

    f-stack中ipc传递指针从应用中读取信息时挂掉 如:创建bridge0./ifconfig bridge0 create./ifconfig f-stack-0 down./ifconfig f ...

  3. L - Non-Prime Factors (质数筛选+因子分解)

    In many programming competitions, we are asked to find (or count the number of) Prime Factors of an ...

  4. js的call和apply区别

    call和apply都是改变了this的指针. obj.call(newObj, arg1, arg2, ...); obj.apply(newObj, [arg1, arg2, ...]); 上面的 ...

  5. Matlab 奇异值、奇异矩阵、svd函数

    奇异值: 奇异值分解法是线性代数中一种重要的矩阵分解法,在信号处理.统计学等领域有重要应用. 定义:设A为m*n阶矩阵,A'表示A的转置矩阵,A'*A的n个特征值的非负平方根叫作A的奇异值.记为σi( ...

  6. 【转】Binlog 基本操作

    MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. 一般 ...

  7. PHP基础入门(五)---PHP面向对象实用基础知识

    前言: 今天来和大家介绍一下PHP的面向对象.说到面向对象,我不得不提一下面向过程,因为本人在初学时,常常分不清楚面向对象和面向过程,下面就来给大家介绍一下它们的区别: 面向对象专注于由哪个对象来处理 ...

  8. 《程序设计入门——C语言》翁恺老师 第一周编程练习记录

    1 输出“Hello World”(5分) 题目内容: 请输出一行,内容为 Hello World 请注意大小写. 由于这一周只是简单地介绍了C程序的基本框架,还不能做很多事情,甚至还不能做数据的输入 ...

  9. MySQL拓展操作

    MySQL除了基本的增删该查功能,还有以下拓展功能: create table t1( id int ...., num int, xx int, unique 唯一索引名称 (列名,列名), con ...

  10. 如何理解JavaScript中的原型和原型链

    首先是一张关系图,避免抽象化理解时产生的困难 Function对象 函数对象是JavaScript学习中不可避免的一部分,而且这一部分相对重要且抽象 函数的创建方式有2种: 字面量创建 var foo ...