新手必备!Linux Shell从入门到删除根目录跑路指南

[复制链接]
1350|0
 楼主| 无敌小璐璐 发表于 2020-4-15 17:10 | 显示全部楼层 |阅读模式
Shell作为一门Linux下使用广泛的系统语言,其语法简单、上手容易。但是,要想用好、少犯错误,也不是一件容易的事。可谓虽是居家旅行之良药,但也是杀人灭口之利器。

今天,我们就来聊聊Linux下一个常见的问题:如何避免误删目录。

一、变量为空,导致误删文件

  1. base_path=/usr/sbin
  2. tmp_file=`cmd_invalid`
  3. # rm -rf $base_path/$tmp_file

这种情况下,如果cmd执行出错或者返回为空,后果将是灾难性的。那么,应该如何防范及避免呢?

1、利用Shell的变量扩展功能,如果变量为空赋给默认值或者抛出异常退出脚本:

  1. [root@script]# cat a.sh
  2. a=`cmd`
  3. echo ${a:?var is empty}/22
  4. echo 1
  5. [root@script]# bash a.sh
  6. a.sh: line 1: cmd: command not found
  7. a.sh: line 2: a: var is empty
  8. [root@script]#

2、人肉判断变量是否为空:

  1. [[ ${tmp_file} == "" ]] && echo 1
  2. 1
  3. [[ -z ${tmp_file} ]] && echo 1      
  4. 1

3、如果变量未定义,还可以开启set选项:

  1. # cat a.sh
  2. # 若有用未设置的变量即让脚本退出执行
  3. # set -o nounset
  4. # 或
  5. set -u
  6. b=
  7. echo $b
  8. echo $a
  9. echo 1

  10. # bash a.sh

  11. a.sh: line 4: a: unbound variable

  12. # 另外,
  13. # 如果命令运行失败让脚本退出执行
  14. set -o errexit
  15. # 或
  16. set -e

需要注意的是,为空和未定义是两种不同的情况和处理方式,这类似于Java中String=“”和String=null的区别。

二、路径含有空格,导致误删文件

史上最经典的,就要数下面这个bumblebee项目了:

1.png

其实,这个项目本来不出名的,但程序在其安装脚本install.sh里的一个bug让它一下子成为了全世界最瞩目的项目之一。

那么,我们应该如何防范这种问题呢?

1、良好的编程习惯:变量加引号防止扩展

  1. path="/usr/local /sbin"
  2. # rm -rf $path
  3. rm -rf "$path"

2、对变量进行语义检查:比如检测是否含有空格等特殊字符

三、目录或文件含有特殊字符,导致误删文件

2.png

3.jpg

  1. ll
  2. 总用量 8
  3. drwxrwxr-x 2 work work 4096 11月 24 18:57 '~'
  4. -rw-rw-r-- 1 work work   34 11月 24 19:49 a.sh

  5. # rm -rf ~

那么,我们应该如何防范这种问题呢?

1、良好的编程习惯:变量加引号防止扩展

  1. rm -rf "~"

2、如果不确定,删除之前echo或find一下,看看变量被扩展成了啥?

  1. echo rm -rf "~"
  2. rm -rf ~

  3. echo rm -rf ~
  4. rm -rf /home/work

四、cd切换目录失败,导致文件被误删

  1. cd ooxx_path_not_exsit
  2. rm -rf *.exe

恭喜你,在这种情况下,目录下匹配文件都会被误删。

那么,我们应该如何防范这种问题呢?

1、使用逻辑短路操作

  1. cd path && rm -rf *.exe

2、检测path是否存在

  1. [[ -d ~ ]] && echo 1
  2. 1

五、终极解决方案

不要使用root操作系统资源,这样至少不会删除系统文件。

六、在登录Shell下使用友好的提示符

友好的命令提示符,能够时刻提醒操作者当前在哪个路径下,从而避免在错误的路径下操作文件。

4.png

由于时间有限,今天就先讲到这里了。本文通过列举一些常见的case和解决方案,希望能对大家有所启发。如果还有其它的case和建议,欢迎大家留言交流。

**来源:大数据之路

免责声明:本文系网络转载,版权归原作者所有。如有问题,请联系删帖,谢谢!

21ic电子网二维码-论坛用.jpg
↑↑
扫码关注更多精彩内容

您需要登录后才可以回帖 登录 | 注册

本版积分规则

194

主题

242

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部