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