我的解决方案推荐的背景是一个朋友的故事,他进入了第二周
他的第一份工作,清空了半个构建服务器。所以基本任务是找出一个文件是否存在,
如果是,我们把它删掉。但这条河上有几处险滩
所有东西都是文件。
脚本只有在解决一般任务时才有真正的力量
一般来说,我们使用变量
我们经常在脚本中使用-f force来避免人工干预
还有-r递归,以确保我们及时地创建,复制和销毁。
考虑以下场景:
我们有一个想要删除的文件:filesexists.json
这个文件名存储在一个变量中
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
我们还有一个路径变量来让事情变得更灵活
<host>:~/Documents/thisfolderexists pathtofile=".."
<host>:~/Documents/thisfolderexists ls $pathtofile
filesexists.json history20170728 SE-Data-API.pem thisfolderexists
我们来看看-e是否按它应该做的做。文件是否存在?
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
它的功能。魔法。
但是,如果文件变量不小心被求值为nuffin,会发生什么呢?
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
什么?它应该返回一个错误…这是整个故事的开始
文件夹不小心被删除了
另一种方法是专门测试我们所理解的“文件”
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
0
所以文件存在…
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
1
这不是一个文件,我们可能不想删除整个目录
人测有以下说法:
-b FILE
FILE exists and is block special
-c FILE
FILE exists and is character special
-d FILE
FILE exists and is a directory
-e FILE
FILE exists
-f FILE
FILE exists and is a regular file
...
-h FILE
FILE exists and is a symbolic link (same as -L)