繁体   English   中英

在Linux中的shell脚本中挣扎

[英]struggling with a shell script in linux

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

当我通过传递两个参数(例如/ 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"

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM