脚本编写规范

脚本编写规范

  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

相关推荐

  • Linux之进程和计划任务

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

    Linux干货 2016-10-09
  • Kernel——linux的核心

    Linux Kernel: CentOS 启动流程:POST –> BootLoader(BIOS,MBR) –>Kernel(initrd) –> rootfs –> switch_root –> /sbin/init     …

    Linux干货 2016-09-11
  • 磁盘管理

    磁盘管理 本文将按顺序以实例演示磁盘管理的所有操作,让我们开始吧! 一,磁盘的添加 ① 先来查看linux系统总共有几个磁盘,由图可知是两个,分别是sda,sdb。我们再加一个,按照磁盘命名顺序,应是sdc,他们都在/dev目录下。 补充: 1,磁盘命名规则: 不同磁盘,按照a-z依次标识,如sda,sdb,sdc 同一磁盘的不同分区,按照1,2,&#823…

    2017-08-19
  • HTTP

    使用CentOS 7和CentOS 6实现以下任务 配置四个基于名称的虚拟主机;discuzXwordpressdrupal1.在conf.d下新建并编辑虚拟主机配置文件]# cd /etc/httpd/conf.d/]# vim vhost.confcentos6配置   [root@ _93_ conf.d]#&n…

    Linux干货 2016-10-12
  • Mysql 启动时 报ERROR 2002,分析解决、

    1、故障现象 [root@localhost scripts]# mysql -u root ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysqld.sock’ (2) 2、故障分析 查看mysql实例的状态 [root@localhost scr…

    Linux干货 2017-08-29
  • 详解LVM逻辑卷

       LVM逻辑卷管理 当os6中partprobe 命令不能同步分区完的分区信息,及用ll /dev/sd*、cat /proc/partation、lsblk看的设备分区内容和用fdisk -l 看到的信息不同步 所以用partx -a 设备名或者用partx -a –nr 分区号 设备名 其中表示n是设备名,r 是ran…

    Linux干货 2016-08-29

评论列表(1条)

  • renjin
    renjin 2017-04-21 10:28

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