2013-10-20 159 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循环的一个很好的模板。