Как исправить мой сценарий bash из-за ошибки: синтаксическая ошибка рядом с неожиданным токеном «сделано»?

#bash #unix #centos7 #slurm

#bash #unix #centos7 #slurm

Вопрос:

Я пытаюсь запустить эту программу bash на компьютере Centos7. Я пробовал много разных способов, но все время получаю эту ошибку:

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

Строка 31 принадлежит первой done .

Я 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. Я не могу воспроизвести эту ошибку. Ваши if утверждения неверны, вам нужны пробелы вокруг [ и ] . И вы должны заключать все свои переменные в кавычки, если они содержат пробелы.

2. Вставьте свой скрипт в shellcheck. сеть, чтобы увидеть все другие проблемы.

3. Какая строка является строкой 31? Вы опубликовали только 27 строк. Есть ли еще что-то, что вы не показали?

4. да. Изначально это файл отправки slurm. Я не c / p части #SBATCH.

5.Вам нужно поместить последний cd .. внутри оператора if.

Ответ №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