06 SHELL脚本编程基础-脚本安全set-20210331 (二)
1 脚本安全和 set
set 命令:可以用来定制 shell 环境,它是一个内部命令
-u 在扩展一个没有设置的变量时,显示错误信息, 等同set -o nounset -e 如果一个命令返回一个非0退出状态值(失败)就退出, 等同set -o errexit -o option 显示,打开或者关闭选项 显示选项:set -o 打开选项:set -o 选项 关闭选项:set +o 选项 -x 当执行命令时,打印命令及其参数,类似 bash -x
范例:
1.进入cd/data删除数据,但是误操作,写成了cd/dat,如果执行数据库就会全部被删除,造成不可挽回的结果
2.为了解决这个风险,使用set命令,脚本中添加了set -e,并且将/data定义为一个变量DIR
-e 如果一个命令返回一个非0退出状态值(失败)就退出, 等同set -o errexit
3.修改脚本后,给他执行权限,创建一些文件在/data里面并执行脚本
4.查看执行结果,原来目录还有的,现在文件被删除了
5. 这是很危险的一件事,需要阻止这种情况
6.再次修改脚本并创建文件
如果此处把data改为dat
7.修改之后,再次执行,有报错提示,及时止血,第十四行有错误
8.还有一种情况:
变量本应该是DIR,结果写成了Dir
9.以防万一,先把脚本拷贝一下,
做个备份至/opt下面
10.由于错误的定义DIR,此处的Dir等于定义为空,
意味着它进入了家目录/,执行回车就出现意外了
[root@centos8 tmp]# /root/test_set.sh #执行这个脚本,等于是删除了家目录的内容
原来是有这些文件的,现在都没有了
[root@centos8 ~]# ls #家目录没有文件显示了
11.原因就是因为使用了一个根本没有定义过的变量
12.为了防止这种悲剧的发生,需要使用set - u
13.找到备份脚本,
14.修改脚本可以是set -e -u;
也可以写成set -eu
15.由于之前家目录文件已经被删除了,需要再创建一些,然后执行脚本;
16.提示报错,观察一下文件是否存在,答案是依然还在!
这样就不会造成破坏了;
-e 和 -u 配合使用有一定的安全保障!
但是也会带来一些麻烦,具体使用要看环境!
211006 renew~