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