我写了一个脚本,在/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但是条件被忽略。
$dir != "mount" -o $dir != "proc" -o $dir != "sys"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它起作用了!
发布于 2012-04-20 03:05:40
假设需要在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"
donels。>d16>命令(<>d17>)时,请使用-a或-o。使用test || TEST...
sh的特殊参数,你不应该用"sh“来调用"safecopy”。将shebang添加到脚本中,并像调用任何其他命令一样调用它,或者如果它是一个库,则将其源代码编写并直接使用其函数。https://stackoverflow.com/questions/10232196
复制相似问题