我在mbratch的帮助下编写了一个脚本。
我运行如下;
./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
; 检查查找手册页以获取详细信息。
这就是你的全部剧本吗?变量$folder1
从未在任何地方定义。默认情况下,程序将使用 as$1
和中的前两个文本块$2
,因此请改用这些变量。
在那里放一些echo
语句,看看哪些变量有哪些值。
你已经有一个for
循环,所以继续吧。但是,您可能必须将获取文件列表的部分放在其中,$()
以便将其分配给变量,然后对其进行循环。
快速搜索“在 bash 中循环文件”,您会找到一个很好的 for 循环模板。