Macos Bash脚本:意外标记“do';

Macos Bash脚本:意外标记“do';,macos,bash,shell,Macos,Bash,Shell,有人能帮我弄清楚为什么我会收到这个错误,意外标记“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 direc

有人能帮我弄清楚为什么我会收到这个错误,意外标记“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
做
如果[[“${ScanConfirm}”==“Y”];然后
#使用for循环扫描所选目录,并为目录中的每个非MDF文件在temp MDF目录中创建一个MDF文件
XCOUNT=0
回声
echo“扫描目录..这可能需要几分钟”
回声“************************************************************************************”
回声
export TEMP_MDF=“${StartingDir}/MDF_${RANDOM}”
mkdir-p${TEMP_MDF}
对于'find${Dir2Scan}中的文件-类型f`
做
导出错误文件=${FILE}
BASEFILE=`basename${FILE}`
BASEDIR=`dirname${FILE}`
#回声优先级50>“${TEMP\u MDF}/${BASEFILE}.MDF”>“${TEMP\u MDF}/${BASEFILE}.MDF”>“${TEMP\u MDF}/${BASEFILE}.MDF”
echo>>“${TEMP\u MDF}/${BASEFILE}.MDF”
echo“>>”${TEMP\u MDF}/${BASEFILE}.MDF”
echo“${Comments}”>>“${TEMP_MDF}/${BASEFILE}.MDF”
echo“>>”${TEMP\u MDF}/${BASEFILE}.MDF”
echo>>“${TEMP\u 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\u MDF}/${BASEFILE}.MDF”
echo“>>”${TEMP\u MDF}/${BASEFILE}.MDF”
mv“${TEMP\u MDF}/${BASEFILE}.MDF”“${TEMP\u MDF}/${BASEFILE}{RANDOM}.MDF”
ERRORLEVEL=$?
如果[${ERRORLEVEL}-ne 0];然后
停止
fi
XCOUNT=$(${XCOUNT}+1))
echo“${XCOUNT}/${OriginalCount}创建的MDF文件${BASEFILE}.MDF”
完成

来自
帮助,而

while:while命令;执行命令;完成

在语法中,
命令
都不是可选的


如果想要无限循环,请考虑:

while :; do


…这两个命令在语义上是相同的(都是内置命令,状态为0时无条件退出)。

什么?你需要给<>代码> 什么东西来测试,看看它到底应该做什么,你想做什么。加上你好像错过了至少一个<代码>完成了<代码>,一个<代码> FI>代码也在考虑这里之前考虑使用自动分析。这个脚本还有很多错误,如果我们花时间一件一件地做,而shellcheck会给你所有的错误……事实上,这远远超过了重现你所问的单个问题所需的最短代码。另请参见,不要在每行上放置具有相同文件名的
>
。每一次重定向都会重新打开输出文件,这意味着与只打开一次文件并在需要时保持打开相比,效率极低。最好只在整个循环的末尾放置一个
“$TEMP_MDF/$BASEFILE.MDF”
(即在
完成时
),或者,如果希望在较小的块中创建它,则使用
{
}
创建一个,并将重定向放在
}
上。谢谢。添加while:修复了该问题
while true; do