脚本编写规范

脚本编写规范

  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 15:26
下一篇 2017-04-16 15:54

相关推荐

  • 【】

         

    Linux干货 2016-10-30
  • Linux进程与作业1

    Linux进程与作业 操作系统的组成部分:硬件,kernel,lib, 系统调用–>调用kernel lib调用–> 库调用,kernel调用 运行用户代码–>用户模式–>用户空间; 运行kernel–>内核模式–>内核空间; 内核的功用:进程管理,文件系统,网络功能,内存管理,驱动程序,安全功能 C…

    Linux干货 2016-08-02
  • > 输出重定向

    重定向输出 > >> 追加 目 录 1、 >正确定向等同于1> 2、 2> 错误定向 3. &> 把错误导成正确的{洗钱} 4. 正确的变成错误的 5. > 覆盖 6. 举一反三 最近学的命令中学到了一些很有意思的命令,分享一下 > 重定向输出 最…

    Linux干货 2017-08-13
  • Linux学习总结及练习&day08-sed文本处理工具

    第一部分、Linux文本处理三剑客之sed(Stream EDitor)文本编辑工具     一、sed的基本功能工作原理     sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令…

    Linux干货 2016-08-10
  • 位运算符及其应用

    一、C语言的六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 1.   按位与运算 按位与运算符"&"是双目运算符。     &nb…

    Linux干货 2015-11-18
  • 网络配置的常用工具

    一、网络配置的常用工具     例如:                ifcfg:ifconfig、route、netstat    &nb…

    Linux干货 2016-09-09

评论列表(1条)

  • renjin
    renjin 2017-04-21 10:28

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