2015-11-19 126 views
0

我想创建一个脚本,它需要两个参数,源文件夹和目标文件夹。如果找不到源目录并退出程序,我试图显示一条错误消息。如果没有找到目标目录,我希望它创建该目录。然后我想将源目录中的所有内容复制到目标目录。努力在Linux中的shell脚本

当我运行带有两个参数传递的程序,例如到/ mnt/sdb1的和-root /我的文档/ photoarch,我会得到错误:

CP:不能STAT '到/ mnt/adb1 /':没有这样的文件或目录

我会把它想显示我的错误,我编码并创建文件夹,如果尚未创建,但它不会这样做。

感谢

#!/bin/sh 
clear 
#checking that arguments exist 
if [ $# -eq 0 ]; then 
    echo "Usage: phar image_path archive_path" 
elif [ -d $1 ]; then 
    echo "Source directory not found" 
    exit 
elif [ -d $2 ]; then 
    mkdir ~root/my-documents/$2 
else 
    cp -r $1 $2 
fi 

回答

2

你缺少否定:

elif [ ! -d $1 ]; then 
... 
elif [ ! -d $2 ]; then 

作为最佳实践的建议,我建议你附上的$1$2所有出现的双引号。否则,您可能会遇到包含空格的路径问题。例如:

cp -r "$1" "$2" 
0

在第三elif条款,你使目标目录,如果它不存在,但你把它创建为根的主目录下的子目录,然后尝试复制到不存在的你刚刚验证的目录不存在(一旦你像@Stefan Majewsky注意到的那样反转标志)。如果您打算将目标目录创建为根目录的子目录(或其他任何地方),那么我建议您在某种程度上重构您的代码以设置变量,如SRCDIR和DSTDIR,以便您可以更轻松地操作它们他们需要改变。有了这个,你可以看到这样的代码:

#!/bin/sh 
clear 
#checking that arguments exist 
if [ $# -eq 0 ]; then 
    echo "Usage: phar image_path archive_path" 
    exit 1 
fi 
SRCDIR="$1" 
DSTDIR="$2" 

if [ ! -d $SRCDIR ]; then 
    echo "Source directory not found" 
    exit 
elif [ ! -d $DSTDIR ]; then 
    DSTDIR="~root/my-documents/$DSTDIR" 
    echo "Creating destination directory $DSTDIR" 
    mkdir $DSTDIR 
fi 

cp -r "$SRCDIR/*" "$DSTDIR" 

我希望这能够充分回答你的问题。