【发布时间】:2015-06-16 01:58:52
【问题描述】:
谁能帮我弄清楚为什么我会收到这个错误,意外标记“do”附近的语法错误。我已经尝试研究答案,但到目前为止还没有运气。以下是我的代码的一部分
while
do
if [[ "${ScanConfirm}" == "Y" ]]; then
# use a for Loop to scan the chosen directory and for every non-MDF file in the directory it creates an MDF file in a temp-MDF directory
XCOUNT=0
echo
echo "Scanning Directory.. this may take a few minutes"
echo "*************************************************"
echo
export TEMP_MDF="${StartingDir}/MDF_${RANDOM}"
mkdir -p ${TEMP_MDF}
for FILE in `find ${Dir2Scan} -type f`
do
export ERRORFILE=${FILE}
BASEFILE=`basename ${FILE}`
BASEDIR=`dirname ${FILE}`
# echo priority 50 >>"${TEMP_MDF}/${BASEFILE}.mdf" <----------- you can take out this arrow and uncomment this to put in priorities
# echo categoryName=${Category} >> "${TEMP_MDF}/${BASEFILE}.mdf" <----------- if you want the category you entered about to show up in MDF you need to uncomment the lines above this note
echo objectName=${RANDOM}${RANDOM}_${NamePrefix}_${BASEFILE} >> "${TEMP_MDF}/${BASEFILE}.mdf"
echo >> "${TEMP_MDF}/${BASEFILE}.mdf"
echo "<comments>" >>"${TEMP_MDF}/${BASEFILE}.mdf"
echo "${Comments}" >> "${TEMP_MDF}/${BASEFILE}.mdf"
echo "</comments>" >> "${TEMP_MDF}/${BASEFILE}.mdf"
echo >> "${TEMP_MDF}/${BASEFILE}.mdf"
echo "originalServer=${BASEDIR}">>"${TEMP_MDF}/${BASEFILE}.mdf"
# echo "originalPath=${BASEDIR}">>"${TEMP_MDF}/${BASEFILE}.mdf"
chaine=`basename ${BASEDIR}`
# echo "sourceDestinationDIVAPath=${chaine}" >>"${TEMP_MDF}/${BASEFILE}.mdf"
echo >> "${TEMP_MDF}/${BASEFILE}.mdf"
echo "<fileList>" >>"${TEMP_MDF}/${BASEFILE}.mdf"
mv "${TEMP_MDF}/${BASEFILE}.mdf" "${TEMP_MDF}/${BASEFILE}_${RANDOM}.mdf"
ERRORLEVEL=$?
if [ ${ERRORLEVEL} -ne 0 ]; then
Stop
fi
XCOUNT=$((${XCOUNT}+1))
echo "${XCOUNT}/${OriginalCount} MDF Files Created ${BASEFILE}.mdf"
done
【问题讨论】:
-
while什么?你需要给while一些东西来测试,看看它应该多久做一次你想做的事情。 -
另外,您似乎至少缺少一个
done和一个fi -
还可以考虑在此处询问之前使用shellcheck.net 进行自动分析。这个脚本还有很多错误,如果 shellcheck 会为您提供所有这些,那么我们花时间一点一点地完成它是很愚蠢的。
-
...事实上,这不仅仅是重现您所询问的单个问题所需的最短代码。见stackoverflow.com/help/mcve
-
另外,不要在每一行放置一个具有相同文件名的
>>。每一次重定向都会重新打开输出文件——与只打开一次文件并在需要时保持打开状态相比,这意味着效率非常低。最好将一个>"$TEMP_MDF/$BASEFILE.mdf"放在整个循环的末尾(即done),或者,如果您希望在较小的块内创建它,则使用{和}来创建一个,并将重定向放在}。