我写了一个脚本mbratch的帮助。查找shell脚本错误
我运行如下;
./scriptname folder1
但是,我看到既没有错误也没有结果,我也不确定有什么问题。
SH -x ./scriptname文件夹1
+ MAIN
+ check_directories
+ [ -d ]
我写了一个脚本mbratch的帮助。查找shell脚本错误
我运行如下;
./scriptname folder1
但是,我看到既没有错误也没有结果,我也不确定有什么问题。
SH -x ./scriptname文件夹1
+ MAIN
+ check_directories
+ [ -d ]
这对我工作得很好:
注:更新,以支持额外的选项。
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/
更换~/
,并确保在使用前设置folder1
和folder2
。还要注意,如果您的目录或文件名称包含空格,这将会中断。在这种情况下,请使用find
;有关详细信息,请检查find man page。
为什么你需要参数?它完成了什么? –
因此,将$ 1和$ 2改为$ 2和$ 3。如果你想要看起来,你将不得不像[getopts](http://stackoverflow.com/a/7680682/1681480) – beroe
更新,以显示一个非常简单的方法来支持更多的选项。如果你需要更复杂的东西,建议使用'getopts'作为beroe。 –
是您的脚本的全部?变量$folder1
从不在任何地方定义。默认情况下,程序将采用前两个文本块作为$1
和$2
,因此请改用这些变量。
把一些echo
语句放在那里看看哪些变量具有什么值。
你已经有for
循环了,所以就去做吧。但是,您可能必须将要获取文件列表的部分放在$()
以内,才能将其分配给变量,然后然后循环。
快速搜索“在bash中循环浏览文件”,您会发现for循环的一个很好的模板。
你在你的家里吗?以'〜/'为前缀_every_的'$ {folderN}'实例,或者为none,而不是_some_。 – Wrikken
如果'$ folder1'或'$ folder2'都不是实际的目录,那么这个脚本将不会执行任何操作。是这样吗? – SethMMorton
无论你是否在达到甚至是条件?在调试时习惯打印日志消息。你的初始条件和循环中的路径不匹配。 “〜/' – jkshah