脚本编写规范
- 脚本名称以.sh结尾,名称见名知意
- 尽量使用UTF-8编码,注释及输出尽量使用英文
- 一般给到执行权限,但一些关于变量的配置文件不用加执行权限
- 执行的时候可以使用bash执行,或者使用bash -x 调试执行
- 脚本首行以#!/bin/bash,无空格,不带选项
- 第二行为空格或者添加一行空注释
-
开始注释内容:
#!/bin/bash
#(空行)
#Filename:文件名
#Dscription:描述
#Author:作者
#Revision:版本号
#Email:坐着联系方式
#Date:日期
#Note:注意事项 #(空行) - 注释内容之后空一行开始定义脚本中的变量
-
脚本内的变量定义,尽量使用大写,或者驼峰写法,或者使用下划线链接的方式,避免使用a,b,c类似的定义,变量的定义前后不要空格
驼峰写法:YourName=xiaoming
大写:YOURNAME=xiaoming
下划线链接:YOU_NAME=xiaoming
注意:
1、如果是整形,需要使用declare -i声明
2、如果是数组,需要使用declare -a声明
3、如果是只读变量,需要使用declare -r声明
4、变量值尽量使用双引号括起,如果使用强引用,如变量值中包含$符号,则使用''单引号将其引用
5、如果将命令的执行结果赋值给变量,则使用$()或者“ -
单引号和双引号混合使用场景
echo 'Welcome to "My school"'
-
在某些特殊环境下,shell脚本里面引用的命令,有可能是自己定义的bin路径,在执行的时候会爆出 command not found。
解决方法:在执行命令的时候跟全路径,或者在脚本的开始,显示的设置一下PATH变量
如:
> export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/apps/bin" -
脚本在执行开始重读一下/etc/profile;或者是自己定义关于环境斌量的配置文件,使用source或者.号:
source /etc/profile source /opt/sh/appenv.sh
-
使用here documene
如果脚本在执行的时候需要大段的输出提示信息,可以使用一下方式:
cat << EOF
This scripts used for XX
Usage:$0 [option]
Pls be careful
Enjoy Yourself
EOF -
如果需要在脚本里生成配置文件的模板,可以使用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 -
创建临时文件
mktemp -d /tmp/file$$
- 条件测试的时候,使用[[ ]],对比[]或者test,[[]]功能更加强大
-
使用算数运算时,使用(())或者是[],括号内的变量不加$
(12+i)) 而不是((12+$i))
-
变量的高级用法
${YourName:?"LiJing"}确保关键斌量已经定义
${YourName:="S1"}或者设置默认值
否则:rm -rf ${GameAone}/* 危险 - 使用 && || 代替if then fi 语句
- 尽量给没调语句或者代码段的执行返回一个执行结果的状态,使用$?检查前面每一条命令的执行状态。
-
流程控制语句尽量使用以下方式:
for I in {1..10};do(在使用{1..$1}的时候,使用sed命令
…
done
或者
while true;do
…
done
以及
if [];then
fi -
如果命令过长,可以分成多行来写:
./configure \
–prefix=/usr \
–sbin-path=/usr/sbin/nginx \
… - shell 脚本并不强制要求缩进,但可以养成缩进习惯
- 尽可能多的写注释信息
-
在获取当前脚本所在目录,可以使用
ScriptDir=$(cd $(dirname $0)&& pwd)
- 尽可能使用函数的功能,将不同的功能定义为函数,直接引用函数
- 如果自定义环境变量,可以专门写到一个文件中,避免在/etc/profile中添加
- 禁止使用SUID和SGID和ACL用户访问列表的功能,如果如果需要极高的权限,可以使用sudo切换到root
- 关键的操作必须有日志的输出,专门记录操作的成功或者失败以及执行的时间点。
- 脚本内可能包含铭感信息,在公开之前先确认敏感信息是否已经删除
原创文章,作者:半斤八两,如若转载,请注明出处:http://www.178linux.com/73427
评论列表(1条)
主要介绍了bash脚本的书写规范及示例说明,内容很的很详细,排版如果可以再好一些就更好了!