51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

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

如果在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不规范,越南等你玩。

赞(3)
未经允许不得转载:工具盒子 » Shell脚本中使用rm命令的致命错误