这是我的第一个使用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语句中添加了关闭参数。我现在得到一个令牌其他错误?
答案 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