2013-10-20 176 views
0

我寫了一個腳本mbratch的幫助。查找shell腳本錯誤

我運行如下;

./scriptname folder1 

但是,我看到既沒有錯誤也沒有結果,我也不確定有什麼問題。

SH -x ./scriptname文件夾1

+ MAIN 
    + check_directories 
    + [ -d ] 
+1

你在你的家裏嗎?以'〜/'爲前綴_every_的'$ {folderN}'實例,或者爲none,而不是_some_。 – Wrikken

+0

如果'$ folder1'或'$ folder2'都不是實際的目錄,那麼這個腳本將不會執行任何操作。是這樣嗎? – SethMMorton

+0

無論你是否在達到甚至是條件?在調試時習慣打印日誌消息。你的初始條件和循環中的路徑不匹配。 「〜/' – jkshah

回答

1

這對我工作得很好:

注:更新,以支持額外的選項。

opt="$1" 
folder1="$2" 
folder2="$3" 

case "$opt" in 
-d) 
    if [ -d "${folder1}" ] && [ -d "${folder2}" ] ; then 
    for i in "${folder1}/*" ; do 
    echo "test <$i>" 
     if [ -f "${folder2}/${i##*/}" ] ; then 
     echo "<${i##*/}>" 
     else 
     echo "! <${i##*/}>" 
     fi 
    done 
    fi 
    ;; 
# Example option 
-h) 
    # Print help and exit. 
    ;; 
# Default case 
*) 
    echo "Unknown option '$opt'" >&2 
    exit 1 
    ;; 
esac 

嘗試用$HOME/更換~/,並確保在使用前設置folder1folder2。還要注意,如果您的目錄或文件名稱包含空格,這將會中斷。在這種情況下,請使用find;有關詳細信息,請檢查find man page

+0

爲什麼你需要參數?它完成了什麼? –

+0

因此,將$ 1和$ 2改爲$ 2和$ 3。如果你想要看起來,你將不得不像[getopts](http://stackoverflow.com/a/7680682/1681480) – beroe

+0

更新,以顯示一個非常簡單的方法來支持更多的選項。如果你需要更復雜的東西,建議使用'getopts'作爲beroe。 –

0

是您的腳本的全部?變量$folder1從不在任何地方定義。默認情況下,程序將採用前兩個文本塊作爲$1$2,因此請改用這些變量。

把一些echo語句放在那裏看看哪些變量具有什麼值。

你已經有for循環了,所以就去做吧。但是,您可能必須將要獲取文件列表的部分放在$()以內,才能將其分配給變量,然後然後循環。

快速搜索「在bash中循環瀏覽文件」,您會發現for循環的一個很好的模板。