仅当目录使用shell脚本存在时才删除该目录

仅当目录使用shell脚本存在时才删除该目录,shell,Shell,我有一个shell(ksh)脚本。我想确定某个目录是否存在于/tmp中,如果存在,则必须将其删除。我的剧本是: 测试 #!/usr/bin/ksh # what should I write here? if [[ -f /tmp/dir.lock ]]; then echo "Removing Lock" rm -rf /tmp/dir.lock fi 我怎样才能继续?我没有得到想要的结果:当我执行脚本时,目录没有被删除,我的屏幕上也没有得到删除锁的输出 我手动进行了检查,锁

我有一个shell(
ksh
)脚本。我想确定某个目录是否存在于
/tmp
中,如果存在,则必须将其删除。我的剧本是:

测试

#!/usr/bin/ksh
# what should I write here?
if [[ -f /tmp/dir.lock ]]; then
    echo "Removing Lock"
    rm -rf /tmp/dir.lock
fi
我怎样才能继续?我没有得到想要的结果:当我执行脚本时,目录没有被删除,我的屏幕上也没有得到
删除锁的输出

我手动进行了检查,锁定文件位于该位置。
锁文件是由TCL程序使用
set MUTEX\u lock”/tmp/dir.lock“
创建的。

对于目录检查,您应该使用
-d

if [[ -d /tmp/dir.lock ]]; then
    echo "Removing Lock"
    rm -rf /tmp/dir.lock
fi

除了
-f
-d
相比,请注意
[[]]
不是POSIX,而
[]
是POSIX。您多次使用的任何字符串或路径都应该位于一个变量中,以避免键入错误,特别是当您使用
rm-rf
时,它会以极大的偏见删除。最可移植的解决方案是

DIR=/tmp/dir.lock
if [ -d "$DIR" ]; then
    printf '%s\n' "Removing Lock ($DIR)"
    rm -rf "$DIR"
fi

该文件是否存在于目录中?@Rubens:请检查更新的问题看起来您对自己正在做的事情感到非常困惑:您说您有一个Tcl脚本(扩展名以
.Tcl
结尾),同时以shebang开始(顺便说一句,这是错误的,因为它没有指定完整的路径名,而是相对路径名,因为您忘记了第一个斜杠)它告诉内核使用Korn shell执行脚本。
ksh
。有太多的混乱,甚至不可能推断出您真正想要做什么。该脚本显然是Unix shell脚本,而不是Tcl脚本。@kostix:该脚本只是一个示例脚本,已经有开发人员编写了这种类型的脚本(大)我需要扩展一些功能。像这样使用
printf
有点奇怪。有什么理由吗?为什么不直接做
echo“Removing Lock($DIR)”
?因为
printf
是新的echo,它是90年代的。没有系统V和BSD的疯狂,没有-n和-c的麻烦,完全的格式。我需要说更多吗?:-)