2012-12-24 103 views
3

我有一個shell(ksh)腳本。我想確定/tmp中是否存在某個目錄,如果存在,則必須將其刪除。我的腳本是:僅當使用shell腳本存在時才刪除目錄

測試

#!/usr/bin/ksh 
# what should I write here? 
if [[ -f /tmp/dir.lock ]]; then 
    echo "Removing Lock" 
    rm -rf /tmp/dir.lock 
fi 

我如何進行?我沒有得到想要的結果:當我執行腳本時,目錄不會被刪除,並且我的屏幕上沒有輸出Removing Lock

我手動檢查,鎖定文件存在於位置。 鎖文件由TCL程序set MUTEX_LOCK "/tmp/dir.lock"創建。

+0

該文件是否存在目錄中? – Rubens

+0

@Rubens:請檢查更新後的問題 –

+0

看起來您對自己的工作非常困惑:您說您有一個Tcl腳本(擴展名以'.tcl'結尾),並且您同時啓動它與shebang(這是錯誤的,因爲它沒有指定完整的路徑名,而是一個相對的,因爲你忘記了第一個斜槓),它告訴內核使用'ksh' - Korn shell來執行腳本。有太多的困惑,甚至不可能推斷出你真正打算做什麼。 – kostix

回答

16

除了-f-d注意[[ ]]不是POSIX,而[ ]是。您多次使用的任何字符串或路徑應該位於變量中以避免輸入錯誤,尤其是當您使用以極端偏見刪除的rm -rf時。最便攜的解決方案將是

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

這樣使用'printf'有點奇怪。任何理由?爲什麼不只是'echo'去除鎖定($ DIR)「'? – GreyCat

+0

因爲'printf'是新的回聲,這是九十年代。沒有System V與BSD的瘋狂,沒有-n和-c頭痛,完全格式化。需要我多說? :-) – Jens

4

對於目錄檢查,你應該使用-d

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