脚本编写规范

脚本编写规范

  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

相关推荐

  • 计算机的组成和其功能

    图:计算机组成架构 计算机由硬件和软件组成 硬件部分: CPU:又称中央处理器,整个系统最高执行单元,执行各种运算,控制电脑自动协调地完成各种操作。 主板:它把计算机的各个部件紧密的连接在一起,各个部件通过主板进行数据传输,计算机重要的“交通枢纽”都在主板上,他的工作稳定性影响整机的工作稳定性。因同CPU的插脚和性能不同,所以针对不同的CPU也有不同的主板。…

    Linux干货 2016-08-08
  • MySQL-MMM安装指南(Multi-Master Replication Manager for MySQL)

    最基本的MMM安装必须至少需要2个数据库服务器和一个监控服务器下面要配置的MySQL Cluster环境包含四台数据库服务器和一台监控服务器,如下: function ip hostname server id monitoring host 192.168.0.10 mon – master 1 192.168.0.11 db1 1 maste…

    Linux干货 2015-05-01
  • Linux网络属性配置,计算机基础

    Linux网络属性配置,计算机基础 Linux网络属性配置(1): 计算机网络通信:TCP/IP 通过流式化数据相互通信,通过双方一致的时钟频率来完成信号传输; 有两种方式传输:同步传输,异步传输; 借助于介质传输:同轴电缆、网线、无线等; 要想相互通信,也要必须遵循一种(复杂)组织机制,就产生了协议; 通过把协议分层,来分别解决传输过程中各种复杂的操作; …

    Linux干货 2016-09-05
  • keepalived+nginx-upstream部署高可用反向代理

    keepalived+nginx-upstream部署高可用反向代理 实验拓扑 实验要求 两个web server提供httpd服务,ip地址分别是172.18.27.201、202,掩码是16 两个nginx proxy提供高可用反向代理,ip地址分别是172.18.27.102、200,掩码是16. client能够访问web server,使用dr模型…

    2017-05-15
  • linux进程管理

    进程概念 内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、 安全功能等 Process:  运行中的程序的一个 副本,是被 载入内存的一个指令集合     进程ID (Process ID,PID)号码被用来标记各个进程  &…

    Linux干货 2016-09-12
  • 1017练习题

    1017练习题 作业 10月17日 柴震 1.生产环境发现一台服务器系统时间产生偏差,造成服务异常,请帮忙校正。 hwclock 查看硬件是否准确,如准确无误,可以使用hwclock -s以硬件时间为准。 或者使用ntpdate命令指定一台NTP服务器,进行同步。 2.生产有一个数据同步脚本需要执行很长时间,怎样做到无人值守,在…

    Linux干货 2016-10-18

评论列表(1条)

  • renjin
    renjin 2017-04-21 10:28

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