如何修复错误的Bash脚本:错误的令牌'done'附近的语法错误?

时间:2019-04-15 23:29:29

标签: bash unix centos7 slurm

我正在尝试在Centos7机器上运行此bash程序。 我尝试了许多不同的方法,但是每次都出现此错误:

line 31: syntax error near unexpected token `done'
line 31: `done'

第31行属于第一次完成。

我用cat -v mybash.bash来检查奇怪的令牌,但是没有。

我的脚本如下:

for mainFolder in *
do
    if [ -d "${mainFolder}" ]
    then
        cd "${mainFolder}" || exit
        echo "Entering in directory ${mainFolder}" 
        cp ../mypy.py .
        chmod +x mypy.py
        ./mypy.py
        echo "Executing mypy.py"
        sleep 1

        for subFolder in *
        do
            if [ -d "${subFolder}" ]
            then
                cd "${subFolder}" || exit
                echo "Entering in directory $subFolder in $mainFolder"
                echo "Submitting slurm file in current directory"
                sbatch *.slurm
                sleep 1
            fi
            cd ..
        done
    fi
    cd ..
done

请帮助我注意我在做错什么。

非常感谢。

1 个答案:

答案 0 :(得分:1)

我的猜测是,slurm提交脚本不存在。以下内容将检查是否找到了一个且不超过一个的脚本。

我还移动了cd ..,使其仅在cd之后发生。

for mainFolder in *
do
    if [ -d "${mainFolder}" ]
    then
        echo "Entering in directory ${mainFolder}" 
        cd "${mainFolder}" || exit
        cp ../mypy.py .
        chmod +x mypy.py
        echo "Executing mypy.py"
        ./mypy.py
        sleep 1

        for subFolder in *
        do
            if [ -d "${subFolder}" ]
            then
                cd "${subFolder}" || exit
                echo "Entering in directory $subFolder in $mainFolder"
                scripts=$(ls *.slurm)
                nScripts=$(echo $scripts | wc -w)
                if [ $nScripts == 1 ]
                then
                    echo "Submitting $scripts"
                    sbatch $scripts
                elif [ $nScripts == 0 ]
                then
                    echo "Error: No script found"
                else
                    echo "Error: $nScripts scripts found (${scripts})"
                fi
                sleep 1
                cd ..
            fi
        done
        cd ..
    fi
done