我写了一个脚本,它在/mount/data/
中备份到已安装的磁盘,我不想复制该文件夹,同时复制其他文件夹,我不想复制proc
,{{1也是
sys
但条件被忽略
for dir in `ls /`; do
if [ $dir != "mount" -o $dir != "proc" -o $dir != "sys" ]; then
sh /home/bin/safecopy $dir
fi
done
而$dir != "mount" -o $dir != "proc" -o $dir != "sys"
尝试复制safecopy
,mount
和proc
...为什么?
但是当我这样做时
sys
它有效!
答案 0 :(得分:5)
假设需要在Bash以外的shell上运行的好方法是使用case
,因为它支持模式匹配(与[
不同):
for dir in /*/; do
case $dir in
/mount/|/proc/|/sys/)
:
;;
*)
/home/bin/safecopy "$dir"
;;
esac
done
具体来说,对于Bash,您可以使用:
shopt -s extglob
for dir in /!(mount|proc|sys)/; do
/home/bin/safecopy "$dir"
done
ls
。"$(cmd)"
。-a
命令(-o
)时,切勿使用test
或[
。使用[test] || [测试] ...... safecopy
的特殊参数,则不必使用“sh”调用“sh
”。在脚本中添加一个shebang并像任何其他命令一样调用它,或者如果它是一个库,请直接使用它并直接使用它的函数。