在bash中使用cp来更新文件信息或重命名

时间:2015-03-23 01:11:24

标签: bash cp

这是我的第一个使用bash的脚本,我正在创建它以使用户输入检查目录并查看该文件是否已经在目录中并且是否已经备份,如果没有取出该文件并将其复制到备份。但是,一旦代码运行,它就会触发第一个if语句,并提醒我文件在目录中但是它无法创建备份。如果我理解复制命令,我应该首先使用cp然后(文件A)到(文件A备份)

B1="${1}_bck1"
B2="${1}_bck2"
#echo $1 contains the first the u typed on the command line after the script
if [ -e $1 ]
    then 
        echo "The file already exists"
        fi
        if [ -e $B1 ]
            then
                cp $B1 $B2
                fi
if [ -e $B1 ]
    then
        echo ${1}
        cp $1 $B1 
        mv $B1 test
        fi      
    else 
        echo "The file does not exist"
        exit
fi

EDIT1。如果文件已经在目录中,我在fi语句中添加了关闭参数。我现在得到一个令牌其他错误?

1 个答案:

答案 0 :(得分:2)

代码格式错误,并且以令人困惑的方式缩进。

让你或任何人都很难看到真正发生的事情 有一个额外的' fi'在一个“其他人”之前,对于初学者来说,这是一件非常重要的事情。

格式化之后,我可以看到结构和发生了什么,错误立即变得明显,这就是为什么你需要遵守如何布置代码的原则。这就是我通过简单地缩进和减少垂直空间而看到的内容:

原始代码的SYNTACTIC CLEANUP(仅限)

#/bin/bash
B1="${1}_bck1"
B2="${1}_bck2"
if [ -e $1 ]; then 
    echo "The file already exists"
fi
if [ -e $B1 ]; then
    cp $B1 $B2
fi
if [ -e $B1 ]; then
        echo ${1}
        cp $1 $B1 
        mv $B1 test
fi      
else 
    echo "The file does not exist"
    exit
fi

你连续两次检查是否存在$ B1 如果B1存在于同一个if块中,为什么不把你执行的所有代码都放? 如果文件$ 1存在,你真的想继续吗?

这是我试图让它至少运行的尝试。不确定它是否会完全符合您的要求,但它的可读性和可执行代码更易于使用。

这更像你想要的吗?

改进了原始代码的版本:

#/bin/bash
B1="${1}_bck1"
B2="${1}_bck2"
if [ -e $1 ]; then 
    echo "The file already exists"
    exit 0
fi
if [ -e $B1 ]; then
    cp $B1 $B2
    echo $1
    cp $1 $B1 
    mv $B1 test
else
    echo "The file does not exist"
    exit 0
fi