我想编写一个shell脚本来检查某个文件 archived_sensor_data.json
是否存在,如果存在,则删除它 . 在http://www.cyberciti.biz/tips/find-out-if-file-exists-with-conditional-expressions.html之后,我尝试了以下方法:
[-e archived_sensor_data.json] && rm archived_sensor_data.json
但是,这会引发错误
[-e: command not found
当我尝试使用 ./test_controller
命令运行生成的 test_controller
脚本时 . 代码有什么问题?
4 回答
您在支架和
-e
之间缺少必要的空格:以下是使用
ls
的替代方法:如果你想隐藏
ls
的任何输出,所以你只看到是或否,将stdout
和stderr
重定向到/dev/null
:在内部,rm命令必须测试文件是否存在,
为什么要添加另一个测试?只是问题
它会在那之后消失,无论它是否存在 .
使用rm -f是您不希望有关于不存在的文件的任何消息 .
如果您不需要执行某些操作,那么您必须自己测试 . 根据您的示例代码,在这种情况下不是这种情况 .
我的解决方案建议的背景是一个朋友的故事,他在第一份工作的第二周,擦拭了半个构建服务器清理 . 所以基本的任务是弄清楚文件是否存在,如果存在,让我们删除它 . 但是这条河上有一些危险的急流:
一切都是文件 .
脚本只有在解决一般任务时才有真正的力量
一般来说,我们使用变量
我们经常在脚本中使用-f force来避免手动干预
并且还爱 - 递归以确保我们及时创建,复制和销毁 .
请考虑以下情形:
我们有要删除的文件:filesexists.json
该文件名存储在变量中
我们还有一个路径变量来使事情变得非常灵活
那么让我们看看
-e
是否做了它应该做的事情 . 这些文件存在吗?确实如此 . 魔法 .
但是,如果文件变量被意外地评估为nuffin,会发生什么?
什么?它应该返回错误...这是故事的开始,如何整个文件夹被意外删除
另一种方法是专门测试我们理解为“文件”的内容
所以文件存在......
所以这不是一个文件,也许,我们不想删除整个目录
man test
有以下说法: