linux中的shell脚本

linux中的shell脚本,linux,shell,Linux,Shell,我正在尝试创建一个脚本,它包含两个参数:源文件夹和目标文件夹。如果找不到源目录,我试图显示一条错误消息并退出程序。如果找不到目标目录,我希望它创建该目录。然后我想将所有内容从源目录复制到目标目录 当我在传递了两个参数(例如/mnt/sdb1和-root/my documents/photoarch)的情况下运行程序时,我将得到以下错误: cp:无法统计“/mnt/adb1/”:没有这样的文件或目录 我希望它显示我的错误,我已经编码和创建文件夹,如果还没有创建,但它没有这样做 谢谢 #!/bin/

我正在尝试创建一个脚本,它包含两个参数:源文件夹和目标文件夹。如果找不到源目录,我试图显示一条错误消息并退出程序。如果找不到目标目录,我希望它创建该目录。然后我想将所有内容从源目录复制到目标目录

当我在传递了两个参数(例如/mnt/sdb1和-root/my documents/photoarch)的情况下运行程序时,我将得到以下错误:

cp:无法统计“/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

您缺少否定:

elif [ ! -d $1 ]; then
...
elif [ ! -d $2 ]; then
作为最佳实践建议,我建议您将所有出现的
$1
$2
用双引号括起来。否则,您可能会在包含空格的路径上遇到问题。例如:

cp -r "$1" "$2"

在第三个
elif
子句中,如果目标目录不存在,则创建目标目录,但将其创建为root主目录的子目录,然后尝试复制到刚才验证不存在的不存在目录(如@Stefan Majewsky所述,一旦反转标志)。如果要将目标目录创建为root主页的子目录(或其他任何地方),我建议对代码进行某种程度的重组,以设置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"
我希望这能充分回答你的问题