脚本编写规范

脚本编写规范

  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

相关推荐

  • redis/twemproxy 客户端连接异常

    对于一个DBA,客户端连接异常问题可以说是家常便饭的事情,处理多了都想吐。 root cause无疑发生在三个地方,先找自身的原因,依次排查下去: 1)服务器端db的负载,如果负载太高,创建socket太慢引起超时。另外服务器端socket的个数太多,也可以导致创建连接需要很长的时间或者创建连接不成功。 2)网络是够有抖动,包括lvs/twemproxy重启…

    Linux干货 2015-04-03
  • 说说web和http以及lamp/lnmp

    <span style="font-size: 24px;font-family: 宋体,SimSun">**说说web和http以及lamp/lnmp**</span> 说说web和http以及lamp/lnmp 在这篇文章当中你将看到如下内容: web与http的简介,网页的分类 度量网站流量的几个术语——知道…

    2016-05-28
  • Linux干货 2017-12-02
  • 马哥教育网络班21期+第6周课程练习

    请详细总结vim编辑器的使用并完成以下练习题1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; %s/^([[:space:]]{1,}.*)/#\1/s 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行…

    Linux干货 2016-08-15
  • linux网络管理

    什么是计算机网络     计算机网络是指将不同地理位置上,具有独立功能的计算机和网络设备通过通信链路连接起来,通过操作系统,网络管理软件,和网络通信协议的共同组合下的计算机系统团体,实现资源共享,信息传递的网络。计算机网络的组成部分有各种微小大型计算机,网桥,交换机,路由器,传输介质等网络设备,相应的软件系统,相应的通…

    Linux干货 2016-09-05
  • Linux基础知识之RAID

    1、什么是RAID?     多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供。2、RAID的优点?     提高IO 能力:         磁盘并行读写   &n…

    Linux干货 2016-09-01

评论列表(1条)

  • renjin
    renjin 2017-04-21 10:28

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