Kevin_306

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~

posted on 2021-03-31 02:34  熊猫小虾  阅读(129)  评论(0编辑  收藏  举报

导航