Shell脚本中使用rm命令的致命错误

 互联网   2021-06-21 14:40   272 人阅读  0 条评论

如果在shell脚本中使用了一个没有声明的变量,或者是声明了但是没有赋值的变量,当执行该脚本时并不会报错,shell解释器会把前面提到的两种情况的变量值设置为空。如果恰好在rm命令中调用了该变量,那么会造成不可估计的后果,轻则误删文件,重则导致操作系统故障。

                                                                                                       

场景1:



#!/bin/bash
file_dir=
rm -rf ${file_dir}/bin


场景2:



#!/bin/bash
rm -rf ${file_dir}/bin


上面两个脚本执行的结果都一样,脚本没有报错,但是/bin目录被删除了,本来是打算删除某个目录下的bin目录,但是却把系统的/bin目录删除了,结果是系统登录不了,还有一种更加致命的情况,rm命令写成:



rm -rf ${file_dir}/


整个/目录被删除,可以考虑买柬埔寨、越南等方向的机票了。


避免方法

1、用if判断是否为空变量




#!/bin/bash
file_dir=
if [[ -z ${file_dir} ]];then
    echo '变量为空'
else
    echo '变量不为空'
fi


2、设置默认值



rm -rf ${file_dir:-/tmp/}/bin


3、其它方法

方法还有很多,可以根据自己实际情况来。


总之,道路千万条,安全第一条,rm不规范,越南等你玩。

本文地址:https://www.dockercn.net/?id=138
版权声明:本文为原创文章,版权归 互联网 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?