脚本编写规范

脚本编写规范

  1. 脚本名称以.sh结尾,名称见名知意
  2. 尽量使用UTF-8编码,注释及输出尽量使用英文
  3. 一般给到执行权限,但一些关于变量的配置文件不用加执行权限
  4. 执行的时候可以使用bash执行,或者使用bash -x 调试执行
  5. 脚本首行以#!/bin/bash,无空格,不带选项
  6. 第二行为空格或者添加一行空注释
  7. 开始注释内容: 
    #!/bin/bash 
    #(空行)
    #Filename:文件名
    #Dscription:描述
    #Author:作者
    #Revision:版本号
    #Email:坐着联系方式
    #Date:日期
    #Note:注意事项 #(空行)
  8. 注释内容之后空一行开始定义脚本中的变量
  9. 脚本内的变量定义,尽量使用大写,或者驼峰写法,或者使用下划线链接的方式,避免使用a,b,c类似的定义,变量的定义前后不要空格

    驼峰写法:YourName=xiaoming
    大写:YOURNAME=xiaoming
    下划线链接:YOU_NAME=xiaoming 
    注意:
    1、如果是整形,需要使用declare -i声明
    2、如果是数组,需要使用declare -a声明
    3、如果是只读变量,需要使用declare -r声明
    4、变量值尽量使用双引号括起,如果使用强引用,如变量值中包含$符号,则使用''单引号将其引用
    5、如果将命令的执行结果赋值给变量,则使用$()或者“

  10. 单引号和双引号混合使用场景

    echo 'Welcome to "My school"'

  11. 在某些特殊环境下,shell脚本里面引用的命令,有可能是自己定义的bin路径,在执行的时候会爆出 command not found。

    解决方法:在执行命令的时候跟全路径,或者在脚本的开始,显示的设置一下PATH变量
    如: 
    > export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/apps/bin"

  12. 脚本在执行开始重读一下/etc/profile;或者是自己定义关于环境斌量的配置文件,使用source或者.号:

    source /etc/profile source /opt/sh/appenv.sh

  13. 使用here documene

    如果脚本在执行的时候需要大段的输出提示信息,可以使用一下方式:
    cat << EOF
    This scripts used for XX
    Usage:$0 [option]
    Pls be careful
    Enjoy Yourself
    EOF

  14. 如果需要在脚本里生成配置文件的模板,可以使用here document的方式 cat>>/etc/rsyncd.conf<<EOF
    log file = /usr/local/logs/rsyncd.log
    transfer logging = yes
    syslog facility
    timeout = 300
    [data1]
    path=/home/username
    list=yes
    ignore errors
    auth users = date1user
    secrets file=/etc/rsyncd/rsyncd.secrstc
    comment = some description about this moudle
    exclude = test1/ test2/
    EOF
  15. 创建临时文件

     

    mktemp -d /tmp/file$$

  16. 条件测试的时候,使用[[ ]],对比[]或者test,[[]]功能更加强大
  17. 使用算数运算时,使用(())或者是[],括号内的变量不加$

     

    (12+i)) 而不是((12+$i))

  18. 变量的高级用法

     

    ${YourName:?"LiJing"}确保关键斌量已经定义
    ${YourName:="S1"}或者设置默认值
    否则:rm -rf ${GameAone}/* 危险

  19. 使用 && || 代替if then fi 语句
  20. 尽量给没调语句或者代码段的执行返回一个执行结果的状态,使用$?检查前面每一条命令的执行状态。
  21. 流程控制语句尽量使用以下方式:

     

    for I in {1..10};do(在使用{1..$1}的时候,使用sed命令

    done
    或者
    while true;do

    done
    以及
    if [];then
    fi

  22. 如果命令过长,可以分成多行来写:

     

    ./configure \
    –prefix=/usr \
    –sbin-path=/usr/sbin/nginx \

  23. shell 脚本并不强制要求缩进,但可以养成缩进习惯
  24. 尽可能多的写注释信息
  25. 在获取当前脚本所在目录,可以使用

     

    ScriptDir=$(cd $(dirname $0)&& pwd)

  26. 尽可能使用函数的功能,将不同的功能定义为函数,直接引用函数
  27. 如果自定义环境变量,可以专门写到一个文件中,避免在/etc/profile中添加
  28. 禁止使用SUID和SGID和ACL用户访问列表的功能,如果如果需要极高的权限,可以使用sudo切换到root
  29. 关键的操作必须有日志的输出,专门记录操作的成功或者失败以及执行的时间点。
  30. 脚本内可能包含铭感信息,在公开之前先确认敏感信息是否已经删除

原创文章,作者:半斤八两,如若转载,请注明出处:http://www.178linux.com/73427

(0)
半斤八两半斤八两
上一篇 2017-04-16
下一篇 2017-04-16

相关推荐

  • vim编辑器

    回顾:     正则表达式(BRE, ERE)     BRE:字符匹配:., [], [^]     次数匹配:*,\?,\+,\{m\},\{m,n}     位置锚定:^,$,\<,\>     分组及引用:(),\1,\2,…&…

    Linux干货 2016-12-23
  • 马哥教育21期网络班—第15周课程+练习

    2、删除/boot/grub/grub.conf文件中所有行的行首的空白字符; sed 's@^[[:space:]]\+@@' /boot/grub/grub.conf 3、删除/etc/fstab文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符; sed 's@^#[[:spac…

    Linux干货 2016-11-14
  • Bash Shell编程初学基础篇之一

     Bash Shell编程初学基础篇之一 说明: 本文仅供初学Linux  Bash  shell学员参考学习,大神们如有兴趣请批评指正!!!    相信对于很多Linux初学者或者仅仅是听说Linux还没有接触过的同学会有一种神秘感或者不敢碰触的感觉,今天就帮大家揭开它的神秘面纱,其实并没有那么深不可测,只…

    Linux干货 2015-03-29
  • N25第一周作业

    一.计算机基础知识     1.计算机是什么?         计算机是一种能够按照指令对各种信息进行自动加工和处理的电子设备     2.计算机的组成?       &…

    Linux干货 2016-12-06
  • 第一周作业

    – 描述计算机的组成及其功能。 – 按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。 – 描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。 – 说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shu…

    Linux干货 2016-12-04
  • DNS配置

     DNS配置 基本的配置准备 1.安装bind 2.开启named服务 一、正向解析库 1、修改/etc/named.conf配置文件 vim /etc/named.conf 修改如下行 listen-on port 53 { 10.1.44.2; } allow-query     { any; } recursion no;…

    Linux干货 2016-10-09

评论列表(1条)

  • renjin
    renjin 2017-04-21 10:28

    主要介绍了bash脚本的书写规范及示例说明,内容很的很详细,排版如果可以再好一些就更好了!