0%

提高脚本的健壮性

提高脚本的健壮性

set -u

如果使用一个未定义的变量,脚本将报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@vm-101 ~]# cat a.sh
#!/bin/bash

# 注释是个好习惯

set -u
#f=asdf
echo $f

exit 0


[root@vm-101 ~]# bash a.sh
a.sh:行7: f: 为绑定变量

set -e

脚本中有一个语句返回值为非0,脚本将退出。可以避免在脚本运行过程中,由一个错误导致后面雪崩式的错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@vm-101 ~]# cat a.sh
#!/bin/bash

# 注释是个好习惯

#set -e

rm2 -f asdfasdfasdf

echo 11111111

exit 0


[root@vm-101 ~]# bash a.sh
a.sh:行7: rm2: 未找到命令
11111111 # 取消set -e的注释,再运行对比下。

局部变量

bash脚本中,变量默认都是全局的,这样很方便,但是不够安全。尽量使用局部变量,避免全局变量带来的混乱问题。

定义局部变量的方法:local

定义功能清晰的函数

一个脚本太长,难免会造成维护困难,逻辑混乱。可以灵活使用函数,定义一些功能清晰的函数。可以使脚本看上去更简洁,便于维护,避免在更新升级过程中带入一些未知错误。

信号处理

在信号处理的章节,已经介绍过了。

保持原子性

把一些关联很紧密的事情写在一个事务中,保持他们的原子性。意思就是:要么全部成功,要么全部失败。

标准化返回值

不管是函数还是脚本,都需要标准化的返回值。

标准化参数处理

标准化的参数处理能让人更方便,准确地使用脚本,或者函数。使用者用得对,也能提高健壮性。

标准化帮助文档

理由同标准化参数处理,目的都是为了帮助使用者更好的使用。帮助他不容易出错。

代码审计

利用一些第三方工具,做代码审计。比如:ShellCheck

增加单元测试

比如:shunit2